在C++中打开常量是否合法?

Mot*_*tti 4 c++ switch-statement

我刚刚意识到我引入的一个错误,令我感到惊讶的是它编译了,打开常量是否合法?

Visual Studio 8和Comeau都接受它(没有警告).

switch(42) { // simplified version, this wasn't a literal in real life
    case 1:
        std::cout << "This is of course, imposible" << std::endl;  
}
Run Code Online (Sandbox Code Playgroud)

小智 18

接通常数并不是不可能的.考虑:

void f( const int x ) {
   switch( x ) {   
   ...
   }
}
Run Code Online (Sandbox Code Playgroud)

然而,打开文字常量很少有意义.但这是合法的.

编辑:考虑一下,有一种情况下,开启文字是完全合理的:

int main() {
    switch( CONFIG ) {
           ...
    }
}
Run Code Online (Sandbox Code Playgroud)

程序编译的地方:

g++ -DCONFIG=42 foo.cpp
Run Code Online (Sandbox Code Playgroud)


Chr*_*isF 16

并非所有对编译器有意义的事情都有意义!

以下也将编译,但没有意义:

if (false)
{
   std::cout << "This is of course, imposible" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这取决于我们作为开发人员发现这些.