初識C 常量表示式函式

2021-10-10 13:17:56 字數 846 閱讀 4518

常量表示式函式(constexpr function)是指能用於常量表示式的函式。其定義的方法和其他函式差不多,但主要滿足一下規則:
1. 函式返回型別是字面值型別

2. 函式引數是字面值型別

3. 函式體中有且只有一條return語句

//eg

constexpr

intnew_sz()

constexpr

int foo =

new_sz()

;//foo是乙個常量表示式

constexpr函式中可以包含其他語句,但這些語句執行時不能執行任何操作,只能類似於空語句、型別別名和using宣告等。

constexpr函式的返回值不一定是常量表示式。

constexpr size_t scale

(size_t cnt)

//當實參為常量表示式時,scale也是常量表示式,否則不是。

int arr[

scale(2

)];//right

auto i =2;

int arr1 =

[scale

(i)]

;//wrong

因為i並非常量表示式,所以當scale調入時,返回值並不是乙個常量表示式。

和其他函式不同,constexpr函式能在程式中多次定義。當編譯器想要展開函式時不僅需要函式宣告還需要函式定義。但對於constexpr函式來說,它的多個定義必須一致。因此,constexpr通常定義在標頭檔案中。
參考:c++primer第五版

常量表示式

字面值 是乙個不能改變的值,如數字 字元 字串等。單引號內的是字元字面值,雙引號內的是字串字面值。字面值型別 literal type 算數型別 引用和指標等。常量表示式 const experssion 是指 1 值不會改變 並且 2 在編譯過程就能得到計算結果的表示式。字面量屬於常量表示式,用常...

常量表示式

為了使函式獲取編譯時計算的能力,你必須指定constexpr關鍵字到這個函式。constexpr int multiply int x,int y 將在編譯時計算 const int val multiply 10,10 除了編譯時計算的效能優化,constexpr的另外乙個優勢是,它允許函式被應用...

c 常量和常量表示式

const,預設情況下僅在檔案內有效 const int i 12 const引用 對常量的引用不能被用作修改它所繫結的物件 const int ci 5 const int rci ci rci 90 錯誤 不能修改 允許常量引用繫結到非常量的物件 字面值或表示式上 int i 20 const ...