这种嵌套命名空间语法在C++中是标准的吗?

20

这在C++中是标准的吗?在C#中,我喜欢这样声明嵌套命名空间:

namespace A.B 
{
    class X
    {
    };
}

另一种选择是这个,它有点丑:

namespace A
{
    namespace B
    {
        class X
        {
        };
    }
}

在C++中,我想看看它是否具有类似的功能。最终我发现这个方法是有效的:

namespace A::B
{
    class Vector2D
    {
    }
}

注意::

我想知道这是否是标准的C++,还是微软的特性。 我找不到任何关于它的文档。 我古老的C++98参考书没有提到它,所以我想知道它是微软的扩展还是一个新功能。


1
由于询问外部资源而偏离主题。请查看一些C++参考网站,并阅读一些C++标准,如n3337 - Basile Starynkevitch
3
这是C++17中的一个新功能,在这个回答中提到 - melpomene
我相信我在这里找到了答案:http://en.cppreference.com/w/cpp/language/namespace "namespace ns_name::name (since C++ 17)" - Bob
很遗憾,目前虚幻引擎只支持C++ 11,但对于其他项目来说这也是个好消息。谢谢。 - Bob
@Bob - Unreal?难道它不是一个用于游戏引擎的C++ API集吗?这与编译器支持有什么关系呢? - StoryTeller - Unslander Monica
据我所知,UE4目前仅支持C++ 11。我不确定具体细节。根据你的说法,我开始认为版本与虚幻引擎无关。 - Bob
1个回答

28

是的,这是合法的C++ 17语法。然而,它不叫做嵌套命名空间,而是嵌套命名空间

namespace ns_name::name (8) (自 C++17 起)

[...]

8) 嵌套命名空间定义: namespace A::B::C { ... } 等价于 namespace A { namespace B { namespace C { ... } } }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接