C++命名空间示例:为何namespace A::B { class MyClass{}; }无法编译?
为什么
namespace A::B { class MyClass{}; }无法编译? 嘿,这个问题其实和C++的标准版本直接挂钩,咱们一步步说清楚:
C++17之前的标准不支持这种嵌套命名空间的简写语法
在C++17发布之前,如果你想定义嵌套的命名空间A::B,必须采用分层嵌套的传统写法:namespace A { namespace B { class MyClass{}; } }那种直接写
namespace A::B的简写语法是C17才引入的新特性,要是你用的编译器还停留在C11/C++14甚至更早的标准,它根本不认识这种写法,自然会抛出编译错误。编译器未开启C++17及以上的编译标准
就算你的编译器本身支持C++17,但如果编译时没有指定对应的标准选项(比如GCC/Clang用-std=c++17,MSVC用/std:c++17),编译器会默认切换到更老的标准模式,同样会拒绝这个语法。
总结一下:要么是你的代码用了C17之前的标准编译,要么是没开启C17及以上的编译选项,才导致这个嵌套命名空间的简写语法不被识别。
内容的提问来源于stack exchange,提问作者Yifan
相关产品推荐
相关产品推荐

