C++ 預設參數與引用傳遞:語法、用法及示例

来源:https://www.cnblogs.com/xiaowange/p/18136853
-Advertisement-
Play Games

C++ 預設參數 預設參數概述 在 C++ 中,函數參數可以擁有預設值。這意味著,在調用函數時,如果省略了某個參數,那麼將使用為該參數指定的預設值。 設置預設參數 預設參數值使用等號 = 符號進行設置,位於參數聲明的類型之後。例如: void myFunction(string country = ...


C++ 預設參數

預設參數概述

在 C++ 中,函數參數可以擁有預設值。這意味著,在調用函數時,如果省略了某個參數,那麼將使用為該參數指定的預設值。

設置預設參數

預設參數值使用等號 = 符號進行設置,位於參數聲明的類型之後。例如:

void myFunction(string country = "Norway");

在這個例子中,country 是一個參數,它的預設值為 "Norway"。這意味著,如果在調用 myFunction 時沒有顯式指定 country 參數,那麼函數將使用 "Norway" 作為其值。

示例:使用預設參數

以下示例展示瞭如何使用預設參數:

void myFunction(string country = "Norway") {
  cout << country << "\n";
}

int main() {
  myFunction("Sweden");  // 輸出:Sweden
  myFunction("India");   // 輸出:India
  myFunction();        // 輸出:Norway
  myFunction("USA");    // 輸出:USA
  return 0;
}

在該示例中,myFunction 函數有兩個調用:

  • 第一次調用顯式指定了參數 country"Sweden",因此輸出 "Sweden"
  • 第二次調用顯式指定了參數 country"India",因此輸出 "India"
  • 第三次調用沒有指定參數 country,因此使用預設值 "Norway",輸出 "Norway"
  • 第四次調用顯式指定了參數 country"USA",因此輸出 "USA"

多個參數和預設參數

函數可以擁有多個參數,其中一部分或全部都可以擁有預設值。例如:

void myFunction(string fname, int age = 18) {
  cout << fname << " Refsnes is " << age << " years old.\n";
}

int main() {
  myFunction("Liam");       // 輸出:Liam Refsnes is 18 years old.
  myFunction("Jenny", 25);  // 輸出:Jenny Refsnes is 25 years old.
  return 0;
}

在這個例子中,myFunction 函數有兩個參數:fnameageage 參數擁有預設值 18,這意味著如果在調用函數時沒有顯式指定 age 參數,那麼將使用 18 作為其值。

函數返回值和預設參數

預設參數僅適用於函數參數,不適用於函數返回值。函數的返回值類型由函數聲明中的類型決定,與預設參數無關。

總結

C++ 中的預設參數是一種方便的功能,可以簡化函數調用並提高代碼的可讀性。通過使用預設參數,您可以避免在每次調用函數時都需要顯式指定所有參數,尤其是對於那些經常使用相同值的可選參數。

C++ 函數 - 引用傳遞

引用傳遞概述

在 C++ 中,函數參數可以使用引用傳遞的方式進行傳遞。引用傳遞是指函數直接訪問函數調用者提供的變數的記憶體地址,而不是複製變數的值。這意味著函數可以直接修改調用者變數的值,而無需創建副本。

引用傳遞通常用於以下兩種情況:

  • 需要在函數中修改調用者變數的值
  • 需要在函數中傳遞大型數據結構,例如數組或對象,以避免複製數據的開銷

引用傳遞語法

引用傳遞的參數聲明與普通參數聲明類似,但需要在參數類型後面添加一個 & 符號。例如:

void swapNums(int &x, int &y);

在這個例子中,xy 是引用參數。這意味著函數 swapNums 將直接訪問調用者提供的變數的記憶體地址。

引用傳遞示例

以下示例展示瞭如何使用引用傳遞來交換兩個變數的值:

void swapNums(int &x, int &y) {
  int temp = x;
  x = y;
  y = temp;
}

int main() {
  int firstNum = 10;
  int secondNum = 20;

  cout << "Before swap: " << firstNum << " " << secondNum << endl;

  swapNums(firstNum, secondNum);

  cout << "After swap: " << firstNum << " " << secondNum << endl;

  return 0;
}

在該示例中,swapNums 函數接收兩個引用參數 xy。當調用 swapNums 函數時,它將直接訪問 firstNumsecondNum 變數的記憶體地址,並交換它們的值。

引用傳遞與值傳遞的區別

特性 引用傳遞 值傳遞
參數類型 引用類型 (int&、string& 等) 普通類型 (int、string 等)
參數傳遞 直接傳遞變數的記憶體地址 複製變數的值
修改參數值 可以修改調用者變數的值 不能修改調用者變數的值
效率 通常比值傳遞更有效 通常比引用傳遞效率低

引用傳遞的註意事項

  • 引用傳遞的參數必須在函數調用之前進行初始化。
  • 不能將空指針或野指針作為引用傳遞的參數。
  • 引用傳遞的參數不能重新綁定到其他變數。

總結

C++ 中的引用傳遞是一種強大的功能,可以提高代碼的效率和可讀性。通過理解引用傳遞的語法、用法和註意事項,您可以編寫更加簡潔、高效的 C++ 程式。

最後

為了方便其他設備和平臺的小伙伴觀看往期文章:

微信公眾號搜索:Let us Coding,關註後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0x01 概述 API 是一些預先定義的函數,提供應用程式與開發人員基於某軟體或硬體訪問一組常式的能力 Web APIs 是 W3C 組織的標準,是 JS 獨有的部分 Web API 是瀏覽器提供的一套操作瀏覽器功能和頁面元素的 API,即 DOM 與 BOM 0x02 DOM (1)簡介 文檔對象 ...
  • 1、首先構造函數為中心 function Person() { } var p = new Person(); console.log('Person::', p) console.log(p.constructor Person) 列印如下: 可以看出構造函數通過new得到實例,實例可以通過【co ...
  • 今天我為大家帶來新的作品,iOS17桌面組件神器(Scriptable)原創腳本,精美作品分享!喜歡的話就點關註吧!更多腳本正在路上... * script : ONE-Progress.js * version : 1.0.0 * author : Nicolas-kings * date : 2 ...
  • 適配器模式(Adapter Pattern) 結構型設計模式,見名知意,就是兩個不相容的介面之間的橋梁。它結合了兩個獨立介面的功能。 主要解決:常常要將一些"現存的對象"放到新的環境中,而新環境要求的介面是現對象不能滿足的。 關鍵代碼:適配器繼承或依賴已有的對象,實現想要的目標介面。 優點: 1、可 ...
  • 領域驅動設計(DDD)裡面有一堆專業術語,比如領域、子域、核心域、通用域、支撐域等等,聽著是不是覺得挺嚇人?別怕,我來帶你輕鬆搞懂它們。 如何理解領域和子域? 領域是指一定的業務範圍或問題域。在解決業務問題時,DDD 會將業務領域進行細分,將問題範圍限定在一定的邊界內,在這個邊界內建立領域模型,用代 ...
  • 策略模式(Strategy Pattern) 指對象有某個行為,但是在不同的場景中,該行為有不同的實現演算法。將每個演算法封裝在獨立的類中,使得它們可以互相替換。可以在運行時根據需要選擇不同的演算法,而不需要修改客戶端代碼。 主要解決:在有多種演算法相似的情況下,使用 if...else 所帶來的複雜和難以 ...
  • 抽象工廠模式(Abstract Factory Pattern): 是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 在抽象工廠模式中,介面是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工 ...
  • 原理 在看雪看到一篇文章:逆向調用QQ截圖NT與WeChatOCR-軟體逆向。裡面說了怎麼調用微信和QQ本地的OCR模型,還有很詳細的分析過程。 我稍微看了下文章,多的也看不懂。大概流程是使用mmmojo.dll這個dll來與WeChatOCR.exe做通信的,也是用它來啟動和關閉WeChatOCR ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...