三 constexpr關鍵字(從C到C )

2021-10-09 12:56:23 字數 938 閱讀 4369

內容參考於《21天學通c++》(第八版)

1. 示例
#include

constexpr

double

getpi()

constexpr

double

twicepi()

intmain()

執行結果

constant pi contains value 3.14286

constexpr getpi(

) returns value 3.14286

constexpr twicepi(

) returns value 6.28571

這個程式演示了兩種計算 pi 值的方法:一是在第 8 行宣告常量 pi;二是在第 2 行宣告常量表示式 getpi()。 getpi()和twicepi()看起來像函式,但其實不是函式。函式在程式執行期間被呼叫,但getpi()和 twicepi()是函式表示式,編譯器將每個 getpi()都替換成了 3.14286,並將每個twicepi()都替換成了 6.28571。通過在編譯階段對 twicepi()進行解析,程式的執行速度比將這些計算放在函式中時更快。

2. 作用

通過關鍵字 constexpr,可讓常量宣告像函式,通過英文可以看出來:const常量+expr表示式。常量表示式看起來像函式,但在編譯器和應用程式看來,它們提供了優化可能性。只要編譯器能夠從常量表示式計算出常量,就可在語句和表示式中可使用常量的地方使用它。他的實質還是const或者是常規函式。

3. 常規函式

使用 constexpr 並不能保證一定會進行編譯階段優化。例如,如果您使用常量表示式來計算使用者輸入的數字的兩倍,由於編譯器無法計算這種表示式的結果,因此它們可能忽略關鍵字 constexpr,進而將常量表示式視為常規函式進行編譯。

C 11 constexpr 關鍵字用法

constexpr 是 c 11 中增加的關鍵字,我們可以使用該關鍵字定義以下物件 編譯期常量 常量表示式函式 編譯期常量物件。以下 執行環境為 win10 專業版 vs2019 社群版。常量分為編譯期常量 執行期常量。編譯期常量指的是在編譯階段就可以確定其值,並將其結果展開到使用的地方,不占用記憶...

C 11的constexpr關鍵字

c 11有一些這樣的改善,這種改善保證寫出的 比以往任何時候的執行效率都要好。這種改善之一 假如 你熟悉模板元程式設計 你將發現constexpr使這一切變得更加簡單。假如你不知道模板元程式設計 也沒什麼。constexpr使我們很容易利用上編譯時程式設計的優勢。常量表示式主要是允許一些計算發生在編...

C 11新標準constexpr關鍵字

constexpr是c 11新標準規定的規定的關鍵字。有時我們很難分辨乙個初始值是不是常量表示式,當然可以定義乙個const變數並把它的初始值設為我們認為的某個常量表示式,但在實際使用時,儘管要求如此卻常常發現初始值並非常量 表示式的情況。可以說,這時的物件的定義與使用根本就是兩回事。c 11新標準...