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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...