什么是对常数算法的编译时评估的处理,它可以在预处理器中完成吗?

mat*_*att 3 c c++

template <int T>
void aFunc(){}

int main()
{

    int anArray[45-32];

    switch(4)
    {
    case 4<45:
        break;
    }
    aFunc<4*3/7&8 == 45 - 5>();
}
Run Code Online (Sandbox Code Playgroud)

所以这一切都在VC++ 2005中编译

这个标准?如果是这样,条件运算符返回什么?0和1?有限制吗?

以及最让我感兴趣的东西,你能用宏来做吗?定义?

编辑:

进一步详细说明预处理器位:

#define STRINGAFY(n)     #n
#define STRINGAFY_2(n)   STRINGAFY(n)

#define SOME_RANDOM_MACRO(n)     n


printf("%s", STRINGAFY(1));  //prints out "1"
printf("%s", STRINGAFY(SOME_RANDOM_MACRO(1)));  //prints out "SOME_RANDOM_MACRO(1)"
printf("%s", STRINGAFY_2(SOME_RANDOM_MACRO(1)));  //causes SOME_RANDOM_MACRO to be evaluated and prints out "1"
printf("%s", STRINGAFY_2(1+1)); // doesn't evaluate and print "2", prints "1+1" :(
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 7

这个标准?

是.这些被称为"常量表达式".(另请参阅C++标准中的5.19 [expr.const].)

如果是这样,条件运算符返回什么?0和1?有限制吗?

false并且true,可以隐式转换为0和1.(当然,在您的情况下返回0,因为&优先级低于==.)

你能用宏来做吗?定义?

我不明白这个问题.一些表达式在预处理时间内进行评估#if,但在其他方面保持不变.