內建函式和this指標

2021-08-22 16:33:14 字數 1190 閱讀 4828

呼叫函式需要一定的時間和空間開銷(棧幀),函式呼叫如下:

如圖可知在呼叫函式時需要轉出去呼叫函式,那麼則需要記錄下當時有關資訊,呼叫完畢後在返回,就會浪費大量的時間與空間,從而降低執行效率

c++提供了一種高效的方法,在編譯時將所呼叫的函式**直接嵌入到主調函式中,不用將流程轉出去,這種函式叫內建函式,用inline宣告.但是能否被設定成內建函式,主要取決於編譯器,如果編譯器覺得這個函式複雜並且幅度很長,所以有可能最後沒有被設定成內建函式

class date

;inline void date::display()

簡而言之,例項化出乙個物件,資料成員都開闢了空間,但成員函式並沒有,因為函式只需要知道它的位址就可以呼叫它了,函式是什麼?是實現乙個特定功能的一段**,這段**是直接執行的。如果這段**用到變數,那麼顯然需要分配空間(這是變數分配空間);如果這段**沒有用到變數,那麼實際上是不需要分配空間。

因此,就泛意義上來說,成員函式是不占用空間的,占用空間的只是變數。

但是有乙個疑問就是,比如,定義了物件a和b,呼叫a時,系統如何知道要引用的是a當中的資料成員呢?

#this指標實現機理

class volume

;int volume::box()

int volume::box()

c++預設處理為

int volume::box(volume *this)   //this是被呼叫成員函式所在的物件的起始,則*this是其所在的物件

注意,this常隱式使用,所以在vs編譯器中,成員函式引數不可以傳this,,但在成員函式體中可以使用,正確使用如下:

int volume::box()

{ cout << this->leng;

return (this->leng*this->high*this->width);

//return ((*this)->leng*(*this)->high*(*this)->width)); //也可以這種處理,括號不能省略,注意優先順序問題

匿名函式和內建函式

lambda 1 ps 冒號左邊時引數,右邊是返回值 因為沒有名字,而函式的呼叫就是通過函式名 的 匿名函式單獨使用毫無意義,它是配合內建函式一起使用 匿名函式需要一次性使用 max 最大值 max 可迭代物件 min 最小值 min 可迭代物件 l1 1,2,3,4,5 列印出l1列表中最大的值 ...

內建函式和匿名函式

匿名函式和內建函式 匿名函式定義 為了解決那些功能很簡單的需求而設計的一句話函式 lambda 一行必須寫完 lxx lambda x,y x y print lxx 1,2 匿名函式真的可以匿名 練習 求最大的key值是 dic def func key return dir key print ...

內建函式和匿名函式

內建函式的內容 匿名函式 匿名函式 為了解決那些功能很簡單的需求而設計的一句話函式 這段 defcalc n return n n print calc 10 換成匿名函式 calc lambda n n n print calc 10 上面是對calc這個匿名函式的分析,下面給出了乙個關於匿名函式...