zoukankan      html  css  js  c++  java
  • 静态常量整数成员在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
  • 相关阅读:
    2:编写虚幻引擎中的UC和C++代码
    1:编写虚幻引擎中的UC和C++代码
    0:编写虚幻引擎中的UC和C++代码
    4:虚幻引擎网络架构:技术要点总结篇
    3:虚幻引擎网络架构:GameInfo,PlayerMove
    2:虚幻引擎网络架构:Replication
    1:虚幻引擎网络架构:Actors
    R12-表详解-总帐
    clob 类型
    成本更新和算法
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/6670901.html
Copyright © 2011-2022 走看看