C++ 在当前C++;草稿

C++ 在当前C++;草稿,c++,namespaces,language-lawyer,declaration,C++,Namespaces,Language Lawyer,Declaration,: 在命名命名空间定义中,标识符是命名空间的名称。如果在查找时,标识符引用的命名空间名称(而不是命名空间别名)是在出现命名命名空间定义的命名空间中引入的,或者是在该命名空间的内联命名空间集的成员中引入的,则命名空间定义将扩展先前声明的命名空间。否则,标识符作为命名空间名称引入到命名空间中,其中命名空间定义出现。 < P>,请参阅下面的演示程序。 #include <iostream> namespace A { inline namespace B {

:


在命名命名空间定义中,标识符是命名空间的名称。如果在查找时,标识符引用的命名空间名称(而不是命名空间别名)是在出现命名命名空间定义的命名空间中引入的,或者是在该命名空间的内联命名空间集的成员中引入的,则命名空间定义将扩展先前声明的命名空间。否则,标识符作为命名空间名称引入到命名空间中,其中命名空间定义出现。

< P>,请参阅下面的演示程序。
#include <iostream>

namespace A
{
    inline namespace B
    {
        namespace C
        {
            int x = 10;
        }
    }
    
    namespace C
    {
        int y = 2 * x;
    }
}

int main() 
{
    std::cout << "A::C::x = " << A::C::x << '\n';
    std::cout << "A::C::y = " << A::C::y << '\n';

    return 0;
}
在命名空间C的命名命名空间定义中,标识符是命名空间的名称


如果标识符
C
在查找时引用了名称空间名称(但不是名称空间别名),该名称空间名称是在名称空间定义出现的名称空间a中引入的,或者是在该名称空间a的内联名称空间集的成员B中引入的(第二个)命名空间C的命名空间定义扩展了先前声明的命名空间C.

,以明确地考虑下面的演示程序。

#include <iostream>

namespace A
{
    inline namespace B
    {
        namespace C
        {
            int x = 10;
        }
    }
    
    namespace C
    {
        int y = 2 * x;
    }
}

int main() 
{
    std::cout << "A::C::x = " << A::C::x << '\n';
    std::cout << "A::C::y = " << A::C::y << '\n';

    return 0;
}
在命名空间C的命名命名空间定义中,标识符是命名空间的名称


如果标识符
C
在查找时引用了名称空间名称(但不是名称空间别名),该名称空间名称是在名称空间定义出现的名称空间a中引入的,或者是在该名称空间a的内联名称空间集的成员B中引入的(第二个)命名空间C的命名空间定义扩展了先前声明的命名空间C。

它引用了“出现命名命名空间定义的命名空间”…该命名空间是在lalala所在的命名空间中引入的,或是在该命名空间的lalala中引入的namespace@molbdnilo我对此不太确定。它也可以是以前声明的名称空间,并且正在被定义的名称空间扩展。您可以确定。这不是一个复杂的规范性定义。正如莫尔布尼洛所说的那样。措辞有点冗长,但归根结底,这里指的是名称空间。它指的是“出现命名名称空间定义的名称空间”…它是在lalala所在的名称空间中引入的,或者是在lalala的名称空间中引入的namespace@molbdnilo我对此不太确定。它也可以是以前声明的名称空间,并且正在被定义的名称空间扩展。您可以确定。这不是一个复杂的规范性定义。正如莫尔布尼洛所说的那样。措辞有点冗长,但归根结底,这里指的是名称空间。我还有一点不清楚。文本显示“如果查找时标识符引用名称空间名称…”。但是在您的代码中,找不到名称
C
,这将找到
名称空间A::B::C
。所有的查找都只会找到
A::C
@JoãoAfonso,当在名称空间中查找名称空间标识符时,也会考虑该名称空间的内联名称空间集,同样,代码中也没有通过内联命名空间B的查找。@Joãoafonsow在命名空间A中搜索命名空间C时,也会搜索内联命名空间集。因此,名称空间C的第二个定义扩展了内联名称空间B中声明的名称空间C的定义。AFAICT标准对此没有任何说明。我仍然有一点不清楚。文本显示“如果查找时标识符引用名称空间名称…”。但是在您的代码中,找不到名称
C
,这将找到
名称空间A::B::C
。所有的查找都只会找到
A::C
@JoãoAfonso,当在名称空间中查找名称空间标识符时,也会考虑该名称空间的内联名称空间集,同样,代码中也没有通过内联命名空间B的查找。@Joãoafonsow在命名空间A中搜索命名空间C时,也会搜索内联命名空间集。因此,命名空间C的第二个定义扩展了内联命名空间B中声明的命名空间C的定义。AFAICT标准对此没有任何说明。