C++ 在任何情况下,switch语句中的using声明是否合法?
下面的代码在GCC 9.1(-Wall-Wextra-Werror-g)中编译得很好,没有任何警告或错误,但是clang tidy给了我C++ 在任何情况下,switch语句中的using声明是否合法?,c++,switch-statement,C++,Switch Statement,下面的代码在GCC 9.1(-Wall-Wextra-Werror-g)中编译得很好,没有任何警告或错误,但是clang tidy给了我OCDFAInspection警告:无法访问的代码。因为GCC在交换用例中具有所有这些整数,如整数范围,我担心,这可能是另一个插件,而实际上不是有效的C++。 C++中的下面代码是合法的(17,如果这很重要)?< /P> 名称空间foo{ 无效条(){} } int main(){ int n=42; 开关(n){ 使用名称空间foo;//的switch语句很
OCDFAInspection警告:无法访问的代码。因为GCC在交换用例中具有所有这些整数,如整数范围,我担心,这可能是另一个插件,而实际上不是有效的C++。
C++中的下面代码是合法的(17,如果这很重要)?< /P>
名称空间foo{
无效条(){}
}
int main(){
int n=42;
开关(n){
使用名称空间foo;//的switch
语句很有趣,因为它的语法类似
switch (expression) statement
这里的语句
可以是任何语句。编译器在开关
的范围内对关键字大小写
、默认值
和中断
进行不同的处理,但在其他情况下,您可以拥有任何想要的语句,包括块语句(用大括号括起来的语句列表)你想要什么都行
案例之外的通用语句的问题是它们不会被执行。生成的代码将跳转到特定的案例
标签(或默认
案例),跳过不属于案例的任何语句
但对于这种特殊情况,正如注释中所提到的,它是一个误报。这里使用的using
指令指示编译器将名称空间foo
添加到其符号查找中,但它本身并不创建或生成任何可执行代码。警告是一个异常整洁的bug?@nada-一个误报。using指令只影响块范围内的名称查找。它的“到达能力”毫无意义。