C++错误:'x'不是常量表达式,如何修复?

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以及如何修复它?

das*_*ght 6

内部的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)