mak*_*mak 2 c++ logic compiler-errors constexpr
简而言之,这是一个最小的例子:
struct C {
const int X = 2;
int y = 2;
};
void f(C* x) {
switch(x->y) {
case x->X: printf("%d", 42); break;
case 123: printf("foo");
}
}
int main()
{
C c;
f(&c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器会抱怨error: 'x' is not a constant expression以及如何修复它?
内部的Case标签switch只接受编译时常量表达式.x->X是不是一个常量表达式; 因此它不能用作case标签.
用a替换switch语句if以解决此问题:
if (x->y == x->X) {
printf("%d", 42);
} else if (x->y == 123) {
printf("foo");
}
Run Code Online (Sandbox Code Playgroud)