constexpr與常量表達式(c++11標准)


     常量表達式(const expression):是指值不會改變並且在編譯過程中就得到計算結果的表達式。(運行得到結果的不能成為常量表達式)。

             const int i=3;    //是一個常量表達式

             const int j=i+1; //是一個常量表達式

             int k=23;        //k的值可以改變,從而不是一個常量表達式

             const int m=f(); //不是常量表達式,m的值只有在運行時才會獲取。

    constexpr變量

        C++11允許聲明constexpr類型來由編譯器檢驗變量的值是否是一個常量表達式。聲明為constexpr的必須是一個常量,並且只能用常量或者常量表達式來初始化

             constexpr int i=3;

             constexpr int j=i+1;

             constexpr int k=f(); //只有f()是一個constexpr函數時k才是一個常量表達式

一般來說,若果一旦認定變量是一個常量表達式,那就把它聲明為constexpr類型

盡管指針和引用都可以定義為constexpr,但是他們的初始值卻受到了嚴格的限制。一個constexpr指針的初始值必須是nullptr或者0,或者是存儲某個固定地址的對象。函數體中定義的變量並非存放在固定地址中,因此constexpr指針不可以指向這樣的變量。相反的,對於所有函數體之外的對象地址是固定不變的,可以用constexpr來定義;

必須明確一點,在constexpr聲明中,如果定義了一個指針,限定符號constexpr僅僅對指針有效,與指針所指對象無關。

    const int *p=nullptr;  //p是一個指向整型常量的指針(pointer to const)

    constexpr int *p1=nullptr; //p1是一個常量指針(const pointer)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM