嵌套匿名命名空间

问题描述 投票:0回答:2

以下几行是等效的(从 c++17 开始):

namespace A { namespace B {} }
namespace A::B {}

下面的行有合格的等价物吗?

namespace A { namespace {} }

谢谢你

c++ c++17
2个回答
0
投票

匿名命名空间(也称为未命名命名空间)成员占据全局范围,并且可以在文件中声明之后的所有范围中访问。我们无需任何资格即可访问它们。

如果您考虑以下计划:

#include <iostream>

// named namespace
namespace A {
    // unnamed namespace
    namespace {
        int a;
    }
}

int main(void) {
    // initializing an unnamed namespace member
    // you need to use `::` because that unnamed namespace
    // is containing in a named namespace `A`
    A::a = 10;

    // calling the unnamed namespace member
    std::cout << A::a << std::endl;

    return 0;
}

您必须需要使用限定符

::
,即
A::a
,如果您定义未命名的命名空间,则不再需要使用示例中给出的任何限定符:

// unnamed namespace
namespace {
    int a;
}

int main(void) {
    // simply accessed
    a = 10;
}

0
投票

不。没有语法可以使用单个

namespace
声明在另一个命名空间内创建匿名命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.