C++语言的特性:常数函数表达式 - []
C++在很多地方允许使用常数表达式,比如在常数变量进行初始化时,定义数组时,或者在对模板进行特化时。语言规范要求常数表达式中不能使调用函数,哪怕是非常简单的函数也不行。但表达式相对复杂一点的时候,这个限制使得程序的书写很不方便。比如:
const int n = -17;
int array[ n>0 ? n : -n ];
其实目的是为了求n的绝对值,然后声明大小适当的数组。为了方便我们可以定义一个宏:
ABS(X) ((X)>0 ? n: -n)
const int n = -17;
int array[ ABS(X)];
我们都知道宏的缺点是没有类型检查,如果表达式比较复杂难以调试。一个新的C++建议允许将特定的一类函数在常数表达式中使用,形式如下
return_type functionname(parameters){
return constant_express;
}
可以看出来,这个建议实际上就是将只有一个返回语句的简单函数自动扩展为对应的表达式。这一过程和内联很相似。详细内容参见Generalized Constant Expressions (N1521)
