c過渡c++應知應會(2)

c過渡c++應知應會(2)

  • 1.缺省參數
  • 2.函數重載
  • 3.引用
  • 4.inline

1.缺省參數

缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時,如果沒有指定實參,則采用該形參的缺省值,否則使用指定的實參,缺省參數分為全缺省和半缺省參數。
全缺省
全部形參給缺省值。
半缺省
部分形參給缺省值。
注意:c++規定半缺省參數必須從右往左依次連續缺省,不能跳躍的給。
調用帶缺省參數的函數時,必須從右往左依次給實參,不能跳躍的給。
關鍵
函數聲明和定義分離時,缺省參數不能在函數聲明和定義中同時出現,規定必須在聲明中給缺省值

int add(int a, int b=1)//半缺省
{return a + b;
}
int main()
{add(1);//b使用缺省值return 0;
}
int add(int a=1, int b=1)//全缺省
{return a + b;
}
int main()
{add();//沒有傳參的話,使用缺省值return 0;
}

2.函數重載

在上一次學習中我們知道c++支持在不同域使用同名變量,函數等。
除此之外,c++還可以在同一作用域出現同名函數。
但是有些人就要問了,為什么非得創建同名函數呢?名字不一樣不照樣可以使用嗎?
讓我們看這個例子:


int Add1(int l,int r)
{return l+r;
}
double Add1(double l,double r)
{return l+r;
}

我們想實現兩個數相加函數,但針對不同類型時卻可能要將函數名變成Add1,Add2…
這無疑會在將來調用時產生隱患。所以c++支持出現同名函數,要求同名函數的形參不同,可以參數個數不同或者類型不同。

int Add(int l,int r)
{return l+r;
}
double Add(double l,double r)
{return l+r;
}

這樣在將來調用相加函數時,一律寫成Add即可。
這段代碼有問題嗎?

void func()
{std::cout << "fun()" << std::endl;
}
void func(int a = 10)
{std::cout << "func(int a)" << std::endl;
}

毋庸置疑,兩個函數構成重載。如果程序中沒有func();就不會報錯,但是如果有這一條語句,編譯器就不認得到底要調用哪一個函數。
在這里插入圖片描述

3.引用

概念:引用就是給已存在變量取了一個別名。
編譯器不會為引用變量開辟內存空間。它和它引用的變量共用同一塊內存空間。
例如:這里有一只貓,你可以叫它貓,也可以叫它哈基米,也可以叫它專屬的名字。
定義方式
類型& 引用別名 = 引用對象

int main()
{int a = 0;int& b = a;a++;std::cout << b << std::endl;//輸出結果為1return 0;
}

關于引用需要注意的點:

1.引用在定義時必須初始化,例如int a = 0; int& b = a;不允許等號右邊沒有變量。
**2.**一個變量可以有多個引用。
**3.**引用只能引用一個實體,不能改變
引用的用處:
在c語言階段,我們經常使用指針來操作并解決問題。有了引用后,指針涉及到的一些場景就可以被替代了。而且引用理解起來要比指針容易,能減輕代碼錯誤。
例如,在交換兩個變量的值時:

void Swap(int& a,int& b)
{int tmp=a;a=b;b=tmp;
}

這樣寫非常容易理解。
再比如,在學習數據結構棧時,我們在操作改動棧時,必須要用一級指針來傳參。但有了引用以后,我們可以直接傳引用。比方說在入棧時:我們直接進行操作即可,不用使用->操作符了

void STPush(ST& rs, STDataType x)
{assert(ps);// 滿了, 擴容 if (rs.top == rs.capacity){printf("擴容\n");int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;STDataType* tmp = (STDataType*)realloc(rs.a, newcapacity *sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}rs.a = tmp;rs.capacity = newcapacity;}rs.a[rs.top] = x;rs.top++;
}

4.inline

用inline修飾的函數叫做內聯函數,編譯時編譯器會再調用的地方展開內聯函數,這樣就不需要建立棧幀,提高效率了。

inline int add(int a, int b)
{return a + b;
}
int main()
{//如果匯編中有call add語句就是沒有展開,否則就是展開了add(1, 2);return 0;
}

注意

  • 在vs編譯器debug版本下默認是不展開inline,這樣方便調試。
    在這里插入圖片描述
    (出現了call add說明沒有展開)

  • inline不建議聲明和定義分離到兩個文件。因為如果inline被展開,就沒有函數地址。在鏈接階段,鏈接器需要根據函數調用找到對應的函數定義,但此時可能找不到該函數的地址,從而導致鏈接錯誤。

    如果發現錯誤,歡迎打在評論區。
    主頁還有更多優質內容OvO

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

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

相關文章

SSH連接排故排查

文章目錄SSH連接排故排查案例1&#xff1a;解決思路排故過程故障模擬SSH連接排故排查 案例1&#xff1a; 你是某在線教育公司的運維工程師&#xff0c;負責維護 3 臺應用服務器。今日上午 9 點&#xff0c;開發團隊反饋無法通過 SSH 連接 10.1.8.10 服務器部署代碼。該服務器…

Python爬蟲實戰——使用NetNut網頁解鎖器獲取亞馬遜電商數據的入門指南

摘要在當今數字化時代&#xff0c;電商數據蘊含著巨大的商業價值。亞馬遜作為全球知名的電商平臺&#xff0c;其上的商品信息、用戶評價等數據對于市場分析、競品研究等具有重要意義。然而&#xff0c;由于反爬蟲機制的存在&#xff0c;直接獲取亞馬遜電商數據并非易事。本文將…

汽車多核架構中內存系統故障檢測的改進算法

摘要隨著半導體行業向納米級方向發展&#xff0c;多核架構已成為主流趨勢。然而&#xff0c;這一趨勢也使得多核處理器面臨諸多挑戰&#xff0c;在一定程度上限制了其性能發揮。目前&#xff0c;汽車行業中的混合安全關鍵型系統普遍采用多核處理器。為滿足新興自動駕駛等級的需…

VastBase數據庫Crash后使用gdb收集coredump信息

VastBase數據庫Crash后使用gdb收集coredump信息&#x1f418; 數據庫版本&#xff1a;VastBase G100 V3.0.8檢查數據庫崩潰后生成的core文件&#xff1a; [vbdbadbhost vastbase]$ ll -h core* -rw------- 1 vbdba vbdba 62G Aug 20 20:02 core-vastbase-162199-2025_08_20_19_…

【LeetCode 每日一題】2749. 得到整數零需要執行的最少操作數

Problem: 2749. 得到整數零需要執行的最少操作數 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(1)空間復雜度&#xff1a;O(1)整體思路 這段代碼旨在解決一個具有數學和位運算性質的問題&#xff1a;給定兩個整數 num1 和 num2&#xff0c;找到最小的正整數 k&…

安卓開發工程師中高級知識點 —— 系統底層安全方向

一、AIDL 通信 Android Interface Definition Language 基于 Binder 實現跨進程通信&#xff08;IPC&#xff09;&#xff0c;核心是通過定義接口生成代理類&#xff0c;屏蔽底層 Binder 通信細節 適用于跨進程服務調用&#xff08;如系統服務、多App協作&#xff09;。常見于后…

動環監控系統-機房高效運維

動環監控系統&#xff08;全稱為動力環境監控系統&#xff09;是機房高效運維的核心工具&#xff0c;通過集成動力、環境、安防、IT設備等模塊&#xff0c;結合智能告警、AI分析、3D可視化等技術&#xff0c;實現機房的全方位監控與管理。動力系統監控供電設備&#xff1a;實時…

知微傳感Dkam系列3D相機SDK例程篇:CSharp設置相機工作模式

設置3D相機觸發模式 寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用3D相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。設置觸發模式及API說明 觸發模式說明 知…

PHP 常用函數及用法

文章目錄PHP 常用函數及用法一、字符串處理函數1. 字符串基礎操作2. 字符串查找與替換3. 字符串分割與連接4. 字符串大小寫轉換5. 字符串格式化二、數組操作函數1. 數組基礎操作2. 數組遍歷與查找3. 數組修改與排序4. 數組過濾與合并三、文件操作函數1. 文件讀寫2. 文件和目錄信…

yum命令--obsoletes與--allowerasing兩者的區別

在 YUM&#xff08;Yellowdog Updater Modified&#xff09;包管理工具中&#xff0c;–obsoletes 和 --allowerasing 是兩個與包升級 / 安裝相關的選項&#xff0c;它們的功能和使用場景有明顯區別&#xff1a; 1. --obsoletes&#xff08;默認啟用&#xff09;作用&#xff1…

Day24_【深度學習(3)—PyTorch使用(1)—張量的創建和類型轉換】

一、創建張量1.張量基本創建方式torch.tensor 根據指定數據創建張量 &#xff08;最重要&#xff09;torch.Tensor 根據形狀創建張量, 其也可用來創建指定數據的張量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 創建指定類型的張量1.1 torch.tensor# 方式一&…

阿里云圖像編輯大模型開發部署

與阿里云一起輕松實現數智化讓算力成為公共服務&#xff1a;用大規模的通用計算&#xff0c;幫助客戶做從前不能做的事情&#xff0c;做從前做不到的規模。讓數據成為生產資料&#xff1a;用數據的實時在線&#xff0c;幫助客戶以數據為中心改變生產生活方式創造新的價值。圖像…

查看磁盤分區并新建一個分區,掛載分區

linux系統磁盤df -h查看文件系統的磁盤的空間占用情況&#xff0c;常用于快速檢查磁盤使用率&#xff1a;df -h-h是說把磁盤空間以G位單位&#xff0c;如果直接用df也是可以的&#xff0c;只不過單位是塊&#xff0c;看的不明顯du -sh /home/查看/home目錄下總共占用了多大的空…

vscode單擊暫時預覽文件 雙擊持續打開文件

直接單擊文件列表中的文件&#xff0c;會在編輯器中以預覽模式打開 文件標簽會顯示為斜體&#xff0c;表示是預覽狀態 當您單擊另一個文件或開始編輯時&#xff0c;預覽文件會自動關閉 在 settings.json 中添加&#xff0c;mac通過cmd,實現。 json {"workbench.editor.ena…

設計模式-橋接模式04

什么是橋接模式&#xff1f; 橋接模式就是把事物的兩個方面&#xff08;兩個變化的維度&#xff09;分開管理&#xff0c;讓它們可以分別自由變化&#xff0c;然后通過一個“橋”把它們連接起來。舉個生活中的例子 想象一下你在買鞋子&#xff1a; 鞋子有不同的款式&#xff08…

群暉企業級NAS :從中小企業效率工具到核心業務數據基石

在數字化轉型加速的今天&#xff0c;數據已成為企業最核心的資產。全球超半數財富 500 強企業選擇群暉&#xff08;Synology&#xff09;作為數據管理伙伴&#xff0c;其企業級 NAS 解決方案憑借 DSM 操作系統的生態優勢、硬件與軟件的深度協同&#xff0c;以及覆蓋全場景的產品…

C++訪問限定符private、public、protected的使用場景

C 訪問控制關鍵字&#xff1a;public、private、protected 在C中&#xff0c;public、private和protected是訪問控制關鍵字&#xff0c;用于實現面向對象編程的封裝特性&#xff0c;控制類成員的訪問權限。 訪問控制關鍵字的使用場景 1. public&#xff08;公有成員&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被誤刪除。請恢復該 Deployment 并確保數據持久性。 請按照以下步驟&#xff1a; 如下規格在 mariadb namespace 中創建名為 mariadb 的 PersistentVolumeClaim (PVC)&#xff1a; 訪問模式為 ReadWriteOnce 存儲為 250Mi 集群…

Freertos系列(調度機制與創建任務)

如果不想看的可以直接使用git把我的代碼下載出來&#xff0c;里面工程挺全的&#xff0c;后期會慢慢的補注釋之類的 碼云地址&#xff1a;stm32學習筆記: stm32學習筆記源碼 如果不會使用git快速下載可以選擇直接下載壓縮包或者去看看git的使用 Git入門教程-CSDN博客 一 調…

C++中std::vector Vs std::deque VS std::list對比詳解

1) 核心差異速覽 std::vector&#xff1a;連續內存、隨機訪問 O(1)、尾部 push_back 攤還 O(1)、中間插入/刪除 O(n)&#xff0c;非常緩存友好。std::deque&#xff1a;分段&#xff08;block&#xff09;存儲&#xff0c;不是整體連續&#xff1b;隨機訪問 O(1)&#xff08;但…