gpt4 book ai didi

c++ - 使用指令理解命名空间

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:21 25 4
gpt4 key购买 nike

在下面的程序中我们有两个命名空间:

#include <iostream>
namespace B
{
int c = 42;
}

namespace A
{
using namespace B;
int a = 442;
}

namespace B
{
int b = 24;
}

int main()
{
std::cout << A::a << std::endl; //442
std::cout << A::b << std::endl; //24
std::cout << A::c << std::endl; //42
}

DEMO

我认为程序的行为被 N4296::3.3.6/1 [basic.scope.namespace] 覆盖了:

A namespace member name has namespace scope. Its potential scope includes its namespace from the name’s point of declaration (3.3.2) onwards; and for each using-directive (7.3.4) that nominates the member’s namespace, the member’s potential scope includes that portion of the potential scope of the using-directive that follows the member’s point of declaration.

因此,在 namespace A 的情况下,成员 b 的潜在范围不应该包含程序的任何部分,因为该成员已被声明然后是 using 指令。但实际上它可以通过限定名称查找找到。怎么了?

最佳答案

如果您再次阅读此片段:

the member’s [b's] potential scope includes that portion of the potential scope of the using-directive [in A] that follows the member’s point of declaration.

我相信你必须阅读它说明 bA的范围内从b的角度的声明向前。您在哪里打印 A::b ,这实际上是“遵循成员的声明点”,因此对于该行,b可以在A的范围内找到.这是完全正确的。

关于c++ - 使用指令理解命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28103318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com