静态常量整数成员在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 }
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!