Scott Meyers在effective modern c++中提到“If there were an award for the most confusing new word in C++11, constexpr would probably win it.”
由此可见,constexpr确实是比较难以让人理解。加之其在C++11和14中的标准略有不同,也加剧了这种难度。
参考几本经典教材(C++ primer, effective modern C++, a tour of C++)以及蓝色大大在知乎上的一些解答,整理出constexpr的用法和注意事项。
1.概念,constexpr objects
C++ primer中给出的定义是 “常量表达式是指不会改变并且在编译过程中就能得到计算结果的表达式 【1】。”
可以理解为在const上又加一层限定条件,即const并不限定是编译期常量还是运行期常量,而constexpr必须是编译期常量(在编译阶段得到结果)。
举例如下:
众所周知,array的size是需要在编译期确定的,所以当其size不是一个常量表达式时,是无法通过编译的。
网友评论

