將函式指定為內聯函式,通常就是將它在每個呼叫點上「內聯地」展開。在函式的返回型別前面加上關鍵字inline,這樣就可以將它宣告成內聯函式了:
內聯機制用於優化規模較小、流程直接、頻繁呼叫的函式。inline
const string &
shorterstring
(const string &s1,
const string &s2)
constexpr函式是指用於常量表示式的函式。定於constexpr函式的方法與其他函式類似,不過要遵循幾項約定:函式的返回型別及所有形參的型別都是字面值型別,而且函式體中必須有且只有一條return語句:
執行該初始化任務時,編譯器把對constexpr函式的呼叫替換成其結果值。為了能在編譯過程中隨時展開,constexpr函式被隱式地指定為內聯函式。constexpr
intnew_sz()
constexpr
int foo =
new_sz()
;//正確:foo是乙個常量表示式
constexpr函式體內也可以包含其他語句,只要這些語句在執行時不執行任何操作就行。
當scale的實參是常量表示式時,它的返回值也是常量表示式;反之則不然://例如constexpr函式中可以用空語句、型別別名以及using宣告
//允許constexpr函式的返回值並非乙個常量:
//如果arg是常量表示式,則scale(arg)也是常量表示式
constexpr size_t scale
(size_t cnt)
給scale函式傳入乙個形如字面值2的常量表示式時,它的返回型別也是常量表示式。此時,編譯器用響應的結果替換對scale函式的呼叫。int arr[
scale(2
)];//正確:scale(2)是常量表示式
int i =2;
//i不是常量表示式
int a2[
scale
(i)]
;//錯誤:scale(i)不是常量表示式
consterpr函式不一定返回常量表示式。
c 筆記 inline 內聯函式
相當於將inline函式中的內容直接copy到inline函式呼叫處。不用執行進入函式的步驟,直接執行函式體 相當於巨集,卻比巨集多了型別檢查,真正具有函式特性 編譯器一般不內聯包含迴圈 遞迴 switch 等複雜操作的內聯函式 在類宣告中定義的函式,除了虛函式的其他函式都會自動隱式地當成內聯函式。...
學習筆記 C 內聯函式
對於乙個頻繁使用的短小函式,在c語言中應該用巨集定義實現,在c 中用inline實現。巨集定義與內聯函式的不同用法000。在c語言中,寫一手漂亮的巨集定義是非常有必要的,方式出錯 提高 的移植性和可讀性等。尤其是一些常用或通用的功能函式或者 段,這些功能既可以寫成函式,也可以封裝為巨集定義。就功能性...
C 巨集和內聯函式
c 內聯函式 巨集 就是使用乙個字串來代替乙個表示式大媽或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更...