日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++学习笔记之——引用 内联函数

發布時間:2025/3/15 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++学习笔记之——引用 内联函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


本文為原創作品,轉載請注明出處

歡迎關注我的博客:http://blog.csdn.net/hit2015springhttp://www.cnblogs.com/xujianqing/

作者:晨鳧追風

一直想開始寫C++的學習筆記,學習C++已經兩個月了,今天開始寫一下引用,內聯函數,的一些概念和作用吧。那么開始吧!

????內聯函數:

?我們寫的程序最終都是要用編譯器,進行編譯鏈接形成一段機器可以知道的二進制代碼,接著存到一個內存中,這時候每一段程序代碼都會有自己的一個地址,計算機按照地址增1,依次執行這段代碼,當遇到代碼調用別的函數的時候,這時候就要存儲目前程序執行的很多狀態呀,把這些東西放入堆棧里面,然后去執行被調用的函數,執行完之后再返回原來的程序斷點處繼續執行。這樣一來一去,就會浪費時間和一些內存。于是內聯函數出現了,它就是在編譯器對代碼進行鏈接的階段,在調用函數的位置,用調用的函數代碼替換原來的函數調用,這樣就不用調用來調用去,占去時間和內存。如果你的程序中有十個位置調用了內聯函數,則這個函數將會在整個代碼中存在十個副本。看圖說話:



要用到內聯函數要采取下列兩個措施之一:

  • 在函數聲明前加關鍵字inline

  • 在函數定義前加關鍵字inline

最常見的用法是定義函數和聲明時一起來,

上代碼;


#include<iostream> using namespace std; inline double square(double x) {return x * x; } int main() {double a, b;double c = 11.0;a = square(5.0);b = square(4.5 + 7.5);cout <<"a = "<< a<< endl;cout <<" b = "<< b <<endl;cout<<"square(C++) = " << square(c++) <<endl;cout<<"now c = " <<c<< endl; }





內聯函數總結:

內聯函數就是為了省去函數調用占用的一些時間和內存而出現的,當一些函數比較長時用內聯函數顯然不具有很大意義,執行時間遠大于調用耗去的時間,所以一般情況下,如果函數定義超過多行時不太用內聯函數,而且內聯函數是不允許遞歸的。

引用

如果一個人叫“小明它的小名叫“阿狗,這時你喊“小明或者阿狗大家都明白是它,于是呢當你打“小明時,阿狗也會受傷(同一個人)。引用就是這樣的,同一個變量叫兩個名字,你修改一個名叫“小明的變量后,叫“阿狗的肯定也變了。(記住無論在哪里改它,他們總是一起改變,從一而終)。

舉個例子:把int變量firstName取小名lastName;

intfirstName;

int& lastName = firstName;

取好名字之后兩名字便一直依存。纏纏綿綿。開始了他和他的故事:

注意:必須在聲明引用變量的時候對引用變量進行初始化。如下面:
int first Name;

int & lastName

lastName = firstName??????不可以。。。。不可以 。。。。。不可以。。。。


引用變量有啥用呢?


函數按值傳遞調用過程中,修改形參,相應的實參是不會改變的,因為在調用的過程中先是拷貝那個傳遞過來的值,然后用這個副本進行處理。這樣被調用程序就不會訪問調用程序中的那個變量。

按值傳遞調用遇到大的結構體,復制一下,再用副本這樣會占用時間,于是來一個按引用變量傳遞調用函數。這樣相當于直接對原始的那個值進行操作Ok不用復制,當然你也可以用指針對其進行訪問,有同樣的效果,就是指針用的不太明白,按照引用調用的話,只需按照按值傳遞調用那樣調用程序就好了。

按照指針調用的話,是對指針進行復制,然后用復制的副本進行一系列的操作。

舉個簡單的例子:

#include<iostream> using namespace std ; void swapr(int &a, int &b); //按照引用傳遞進行調用 void swapp(int * p, int * q); //按照指針傳遞進行調用 void swapv(int a ,int b); //按值傳遞進行調用 int main() {int wallet1 = 100;int wallet2 = 200;cout << "wallet1 = " << wallet1 <<endl;cout << "wallet2 = " << wallet2 <<endl;cout << "引用傳遞"<< endl;swapr(wallet1,wallet2);cout << "wallet1 = " << wallet1 <<endl;cout << "wallet2 = " << wallet2 <<endl;cout << "指針傳遞"<< endl;swapp(&wallet1, &wallet2);cout << "wallet1 = " << wallet1 <<endl;cout << "wallet2 = " << wallet2 <<endl;cout << "按值傳遞"<< endl;swapv(wallet1,wallet2);cout << "wallet1 = " << wallet1 <<endl;cout << "wallet2 = " << wallet2 <<endl; }void swapr(int &a, int &b) //按照引用傳遞進行調用 { int temp ; temp = a; a = b; b = temp; } void swapp(int * p, int * q) //按照指針傳遞進行調用 {int temp ; temp = *p; *p = *q; *q = temp;} void swapv(int a ,int b) //按值傳遞進行調用 { int temp ; temp = a; a = b; b = temp; }



分析下程序:


在按照引用傳遞進行函數調用的時候,把wallet1的引用指定為awallet2的引用指定為b,這樣在函數中兩個值互相交換,便可以修改原來的值。按值傳遞時只是對傳遞過來的副本進行交換,并沒有改變原來的值,所以沒有交換成功。


最后進行一下總結:


使用引用的原因:

  • 程序員能夠修改調用函數中的數據對象

  • 通過傳遞引用而不是傳遞整個數據對象,可以提高運行速度,這一點也是指針參數存在的一個原因


下面是一些指導原則:


使用傳遞的值而不對原始值做修改的函數:

  • 數據對象很小,則按值傳遞

  • 數據對象是數組,使用指針(別無選擇)并且將指針聲明為指向const的指針

  • 數據結構較大時,使用const指針或者const引用

  • 數據對象是類對象,使用const引用

使用傳遞的值并且對原始值做修改的函數:

  • 數據對象是內置數據類型,使用指針

  • 數據對象是數組,使用指針

  • 數據對象是結構,使用指針或者引用

  • 數據對象是類結構,使用引用

    ?

?

?

?

總結

以上是生活随笔為你收集整理的C++学习笔记之——引用 内联函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。