c 筆記 內聯函式和constexpr函式

2021-10-13 20:23:26 字數 1204 閱讀 1394

將函式指定為內聯函式,通常就是將它在每個呼叫點上「內聯地」展開。在函式的返回型別前面加上關鍵字inline,這樣就可以將它宣告成內聯函式了:

inline

const string &

shorterstring

(const string &s1,

const string &s2)

內聯機制用於優化規模較小、流程直接、頻繁呼叫的函式。

constexpr函式是指用於常量表示式的函式。定於constexpr函式的方法與其他函式類似,不過要遵循幾項約定:函式的返回型別及所有形參的型別都是字面值型別而且函式體中必須有且只有一條return語句

constexpr

intnew_sz()

constexpr

int foo =

new_sz()

;//正確:foo是乙個常量表示式

執行該初始化任務時,編譯器把對constexpr函式的呼叫替換成其結果值。為了能在編譯過程中隨時展開,constexpr函式被隱式地指定為內聯函式。

constexpr函式體內也可以包含其他語句,只要這些語句在執行時不執行任何操作就行。

//例如constexpr函式中可以用空語句、型別別名以及using宣告

//允許constexpr函式的返回值並非乙個常量:

//如果arg是常量表示式,則scale(arg)也是常量表示式

constexpr size_t scale

(size_t cnt)

當scale的實參是常量表示式時,它的返回值也是常量表示式;反之則不然:

int arr[

scale(2

)];//正確:scale(2)是常量表示式

int i =2;

//i不是常量表示式

int a2[

scale

(i)]

;//錯誤:scale(i)不是常量表示式

給scale函式傳入乙個形如字面值2的常量表示式時,它的返回型別也是常量表示式。此時,編譯器用響應的結果替換對scale函式的呼叫。

consterpr函式不一定返回常量表示式。

c 筆記 inline 內聯函式

相當於將inline函式中的內容直接copy到inline函式呼叫處。不用執行進入函式的步驟,直接執行函式體 相當於巨集,卻比巨集多了型別檢查,真正具有函式特性 編譯器一般不內聯包含迴圈 遞迴 switch 等複雜操作的內聯函式 在類宣告中定義的函式,除了虛函式的其他函式都會自動隱式地當成內聯函式。...

學習筆記 C 內聯函式

對於乙個頻繁使用的短小函式,在c語言中應該用巨集定義實現,在c 中用inline實現。巨集定義與內聯函式的不同用法000。在c語言中,寫一手漂亮的巨集定義是非常有必要的,方式出錯 提高 的移植性和可讀性等。尤其是一些常用或通用的功能函式或者 段,這些功能既可以寫成函式,也可以封裝為巨集定義。就功能性...

C 巨集和內聯函式

c 內聯函式 巨集 就是使用乙個字串來代替乙個表示式大媽或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更...