C++11标准前的编译期运算
在第一篇文章中,我把主要精力放在了什么是编译期常量,以及编译期常量有什么作用上。在这一篇文章中,我将更详细地介绍编译期常量是如何产生的。之所以要把编译期常量了解的这么透彻,是因为他是编译期运算的基础。在这篇文章中还会讲解我们在C++11 标准前都可以用做哪些**编译期运算(**compile-time calculations),通过了解这些比较原始的方法,我们能够更好地理解C++11标准为编译期运算方面所做的工作。
编译期常量都从哪里来?
在我们的经验中,大部分编译期常量的来源还是字面常量(literals)以及枚举量(enumerations)。比如上一篇文章我写的someStruct<42ul, 'e', GREEN> theStruct;中someStruct的三个模板参数都是常量——分别是整形字面量、char型字面量和枚举常量。
比较典型的编译期常量的来源就是内置的sizeof操作符。编译器必须在编译期就知道一个变量占据了多少内存,所以它的值也可以被用作编译期常量。
class SomeClass {
//...
};
int const count = 10; //作为数组的size,编译期常量
SomeClass theMovie[count] = {
/* ... */}; //常量表达式,在编译期计算
int const otherConst = 26; //只是常量,但不是编译期常量
int i = 419;
unsigned char buffer[sizeof(i)] = {
}; //常量表达式,在编译期计算
另一个经常出现编译期常量最常出现的地方就是静态类成员变量(static class member variables),而枚举常量常常作为它的替换也出现在类中。
struct SomeStruct{
static
19万+



被折叠的 条评论
为什么被折叠?



