C++中的默認函數學習

今天在學習QT別人的項目時看到有個函數在聲明和調用時參數個數不一樣,查了下是c++中的一種函數類型,這個類型的函數可以讓代碼更簡潔、靈活。

  • 定義:在函數聲明時,給某些參數預先設定一個默認值。調用函數時,如果省略這些參數,編譯器會自動使用默認值。

  • 調用規則:從第一個默認參數開始,后續參數都可以省略(必須從左到右連續省略,不能跳過中間參數),默認參數放在函數聲明(頭文件)中

    ? 規則1:默認參數必須從右向左設置
    // ? 正確:默認參數在右側
    void func(int a, int b = 10, int c = 20);// ? 錯誤:中間參數不能跳過
    void func(int a = 10, int b, int c);
    
    ? 規則2:默認參數在聲明中設置(頭文件)

    通常放在函數聲明(頭文件)中,而非定義(源文件):

    // header.h
    void printMessage(string msg, int times = 1);// source.cpp
    void printMessage(string msg, int times) {for (int i = 0; i < times; i++) cout << msg << endl;
    }
    
    ?? 注意:默認參數只能設置一次

    避免在聲明和定義中重復設置:

    // ? 錯誤:重復設置默認值
    // header.h
    void foo(int x = 10);// source.cpp
    void foo(int x = 10) { ... }  // 這里不能再寫默認值!
    

代碼示例


#include <iostream>
using namespace std;// 聲明函數時設置默認參數(半糖)
void orderMilkTea(string teaType, int sugarLevel = 50) {cout << "奶茶類型:" << teaType << ",甜度:" << sugarLevel << "%" << endl;
}int main() {orderMilkTea("珍珠奶茶");       // 不傳甜度,默認50%orderMilkTea("烏龍奶茶", 30);   // 傳甜度30%return 0;
}

輸出

奶茶類型:珍珠奶茶,甜度:50%
奶茶類型:烏龍奶茶,甜度:30%

編譯器在調用時會自動補全省略的參數。

使用默認參數的作用


  1. 減少重載函數

    不用為了不同參數組合寫多個重載函數。

    // 不用寫兩個函數:
    // void drinkTea(string type);
    // void drinkTea(string type, int sugar);
    
  2. 提高可讀性

    調用時只需關注需要修改的參數。

  3. 兼容舊代碼

    給已有函數添加新參數時,舊代碼無需修改。

QT中這樣設計的好處

  1. 語法支持:C++標準允許函數參數設置默認值
  2. 實用需求:GUI操作中大多數參數通常不需要特殊設置
  3. API友好:降低簡單場景的使用復雜度,同時保留高級功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92333.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92333.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92333.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HBase分片技術實現

HBase分片技術實現概述HBase是基于Hadoop的分布式、可擴展的NoSQL數據庫&#xff0c;采用列族存儲模型。HBase的分片機制通過Region自動分割和負載均衡實現水平擴展&#xff0c;支持PB級數據存儲和高并發訪問。HBase架構核心組件HMaster: 集群管理節點&#xff0c;負責Region分…

Python爬蟲實戰:研究awesome-python工具,構建技術資源采集系統

1. 引言 1.1 研究背景 Python 憑借語法簡潔、生態豐富等特點,已成為全球最受歡迎的編程語言之一。截至 2024 年,PyPI(Python Package Index)上的第三方庫數量已突破 45 萬個,涵蓋從基礎工具到前沿技術的全領域需求。然而,海量資源也帶來了 "信息過載" 問題 —…

【實時Linux實戰系列】實時視頻監控系統的開發

隨著技術的不斷發展&#xff0c;實時視頻監控系統在安防、交通管理、工業自動化等領域得到了廣泛應用。實時Linux系統因其高效的實時性和穩定性&#xff0c;成為開發高性能視頻監控系統的理想選擇。掌握基于實時Linux的視頻監控系統開發技能&#xff0c;對于開發者來說不僅能夠…

力扣-11.盛最多水的容器

題目鏈接 11.盛最多水的容器 class Solution {public int maxArea(int[] height) {int res 0;for (int i 0, j height.length - 1; i < j; ) {res Math.max(res, Math.min(height[i], height[j]) * (j - i));if (height[i] < height[j]) {i;} else {j--;}}return r…

大型音頻語言模型論文總結

大型音頻語言模型&#xff08;Large Audio Language Model, LALM&#xff09;是一類基于深度學習的智能系統&#xff0c;專門針對音頻信號&#xff08;如語音、音樂、環境聲等&#xff09;進行理解、生成、轉換和推理。它借鑒了大型語言模型&#xff08;LLM&#xff09;的“預訓…

如何解決網頁視頻課程進度條禁止拖動?

function skip() {let video document.getElementsByTagName(video)for (let i0; i<video.length; i) {video[i].currentTime video[i].duration} } setInterval(skip,6666)無法拖動視頻進度。 使用F12啟動調試模式。 function skip() {let video document.getElements…

基于deepSeek的流式數據自動化規則清洗案例【數據治理領域AI帶來的改變】

隨著AI大模型的大量普及&#xff0c;對于傳統代碼模式產生了不小的影響&#xff0c;特別是對于大數據領域&#xff0c;傳統的規則引擎驅動的數據治理已經無法滿足數據增長帶來的治理需求。因此主動型治理手段逐漸成為主流&#xff0c;因此本文介紹一個基于deepSeek的流式數據自…

【論文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio

1.論文信息標題&#xff1a;SEW: Self-Evolving Agentic Workflows for Automated Code Generatio&#xff1a;用于自動代碼生成的自我進化的代理工作流程收錄的會議/期刊&#xff1a;作者信息&#xff1a;arxiv&#xff1a;&#x1f517;github網站&#xff1a;&#x1f517;g…

MCP 協議:AI 時代的 “萬能轉接頭”,從 “手動粘貼” 到 “萬能接口”:MCP 協議如何重構 AI 工具調用規則?

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

VUE本地構建生產環境版本用于局域網訪問

&#x1f680;構建生產環境版本用于局域網訪問&#xff08;適用于 Vue 項目&#xff09; 在開發 Vue 項目的過程中&#xff0c;很多人使用 yarn serve 啟動開發服務器進行調試。但開發模式存在以下問題&#xff1a; 訪問速度慢&#xff0c;特別是局域網訪問&#xff1b;熱更新頻…

【密碼學】5. 公鑰密碼

這里寫自定義目錄標題公鑰密碼密碼學中的常用數學知識群、環、域素數和互素數模運算模指數運算費爾馬定理、歐拉定理、卡米歇爾定理素性檢驗歐幾里得算法中國剩余定理&#xff08;CRT&#xff09;離散對數二次剩余循環群循環群的選取雙線性映射計算復雜性公鑰密碼體制的基本概念…

VINS-Fusion+UWB輔助算法高精度實現

VINS-FusionUWB輔助算法高精度實現 摘要 本文詳細介紹了基于VINS-Fusion框架結合UWB輔助的高精度定位算法實現。通過將視覺慣性里程計(VIO)與超寬帶(UWB)測距技術融合&#xff0c;顯著提高了復雜環境下的定位精度和魯棒性。本文首先分析了VINS-Fusion和UWB各自的技術特點&#…

新手向:Python實現簡易計算器

你是否一直想學習編程但不知從何入手&#xff1f;這篇詳細的教程將帶領完全零基礎的讀者&#xff0c;循序漸進地掌握如何用Python實現一個簡易計算器。我們將從最基本的編程概念講起&#xff0c;確保每一位初學者都能跟上進度。準備工作在開始之前&#xff0c;你需要&#xff1…

區塊鏈賦能供應鏈金融:解決信任與效率問題

摘要: 隨著全球經濟一體化和數字化進程的加速,供應鏈金融在實體經濟發展中的作用愈發關鍵。然而,傳統供應鏈金融面臨著信任機制薄弱和效率低下等諸多挑戰。區塊鏈技術憑借其去中心化、不可篡改、可追溯等特性,為供應鏈金融帶來了創新的解決方案,能夠有效解決信任與效率問題…

無人機 × 巡檢 × AI識別:一套可復制的超低延遲低空視頻感知系統搭建實踐

?? 引言&#xff1a;低空感知&#xff0c;正重構數字世界的“底層感官接口” 隨著低空經濟進入規模化部署階段&#xff0c;感知系統不再是“任務輔助”&#xff0c;而是演變為支撐智能化運行的基礎設施核心模塊。從電力巡檢的高空細節識別&#xff0c;到城市安防的區域態勢掌…

STM32U5 外部中斷不響應問題分析

關鍵字&#xff1a; EXTI 1. 問題背景 客戶的終端客戶反饋產品會有偶發性的功能異常。問題比較難以復現。 經過調查&#xff0c;在 BOOT 程序跳轉到 APP1 程序中時相對比較容易復現問題。查看客戶代碼&#xff0c;發現客戶在 BOOT 程序中會對 EXTI 進行初始化&#xff0c;跳…

17.Linux :selinux

Linux &#xff1a; selinux DAC vs MAC 對比模型控制方式決策依據安全強度DAC自主訪問控制文件所有者的權限設置低MAC強制訪問控制系統級安全策略極高SELinux的核心原理是基于 強制訪問控制&#xff08;MAC&#xff09; 模型&#xff0c;通過為系統資源打上安全標簽并制定精細…

如何在不停機的情況下,將MySQL單庫的數據遷移到分庫分表的架構上?

在業務高速發展的過程中&#xff0c;單庫單表的MySQL架構往往會成為系統性能的瓶頸。將單庫遷移到分庫分表架構是一種常見的擴展方案&#xff0c;但如何在保證業務連續性的前提下完成這一遷移是一個挑戰。以下是不停機遷移的幾種主要方案&#xff1a; 一、基于雙寫的遷移方案 1…

Unix/Linux 系統編程中用于管理信號處理行為的核心概念或模型

在 Unix/Linux 系統編程中&#xff0c;管理信號處理行為涉及以下核心概念和模型&#xff0c;它們共同構成了信號處理的框架&#xff1a;1. 信號&#xff08;Signal&#xff09;模型 軟件中斷&#xff1a;信號是異步事件通知機制&#xff0c;類比硬件中斷預定義類型&#xff1a;…

webrtc弱網-OveruseFrameDetector源碼分析與算法原理

一、核心功能CPU負載檢測&#xff1a;監控視頻幀的捕獲、編碼、發送全流程耗時&#xff0c;實時計算CPU使用率自適應決策&#xff1a;基于CPU使用率閾值觸發視頻質量調整&#xff08;降級/升級&#xff09;多策略支持&#xff1a;提供新舊兩套CPU負載估計算法&#xff0c;支持實…