靜態常量整數成員在class內部直接初始化


 

 

 1 #include <vector>
 2 #include <deque>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <ostream>
 6 #include <iterator>
 7 using namespace std;
 8 template <typename T>
 9 class conststaticconstant
10 {
11 public://class內含const static integral data(整數型別) member,那么就可以直接賦初值
12     static const int _datai = 5;
13     static const long _datal = 3L;
14     static const char _datac = 'c';
15     constexpr static const double _datad = 8.88;//error: 'constexpr' needed for in-class initialization of static data member 'const float conststaticconstant<T>::_dataf' of non-integral type [-fpermissive]
16     //static const float _dataf = 9.9;
17 //    void operator ()(const T& elem){
18 //        cout << elem << ' ';
19 //    }
20 };
21 int main( )
22 {
23     cout << conststaticconstant<int>::_datai << endl;
24     cout << conststaticconstant<long>::_datal << endl;
25     cout << conststaticconstant<char>::_datac << endl;
26     cout << conststaticconstant<double>::_datad << endl;
27     return 0;
28 }

 

C++ constexpr類型說明符

const 和 constexpr 變量之間的主要區別在於:const 變量的初始化可以延遲到運行時,而 constexpr 變量必須在編譯時進行初始化。所有 constexpr 變量均為常量,因此必須使用常量表達式初始化。

 

constexpr 函數是在使用需要它的代碼時,可以在編譯時計算其返回值的函數。當其參數為 constexpr 值並且在編譯時使用代碼需要返回值時(例如,初始化一個 constexpr 變量或提供一個非類型模板參數),它會生成編譯時常量。使用非constexpr 參數調用時,或編譯時不需要其值時,它將與正則函數一樣,在運行時生成一個值。

 

const不同,在constexpr聲明中如果定義了一個指針,限定符constexpr僅對指針有效,與指針所指對象無關

const int *p = 0; // non-const pointer, const data constexpr int *q = 0; // const pointer, non-const data


免責聲明!

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



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