【发布时间】:2016-01-03 02:51:54
【问题描述】:
我知道我将 using 指令的范围限制在一个块或一个函数中。然后它将仅适用于该范围。但如果块是namespace,它显然适用于同一命名空间的所有块。那是对的吗?至少,以下示例表明:(http://ideone.com/K8dk7E)
namespace N1
{
struct Foo{};
}
namespace N2
{
using namespace N1;
Foo f;
}
namespace N2
{
Foo f2;
}
int main()
{
N2::f2;
}
我原以为Foo f2 会出错,因为Foo 应该是未知的。
所以我真正的问题是,命名空间块中的using 语句是否对同一命名空间的所有块都有效?
当所有 cpp 文件被包含并编译在一起时,这会导致问题,因为它会污染其他 cpp 文件,这些文件不应包含其他命名空间(放置 using 指令的命名空间)。因此,实际上它可能会导致不受欢迎的冲突。
【问题讨论】:
-
您是在询问 N1 成员是否会在 N2 的 extension-namespace-definition 中可见?
-
我觉得您提供的示例并不能很好地说明您的问题。使用 SUC,帖子中的代码编译得很好。
-
你确定这不仅仅是包含单个文件的顺序问题吗?
-
@SingerOfTheFall 基本上是的,请查看我的问题的编辑
-
@StoryTeller 它编译得很好,这就是问题所在。请查看我的问题的编辑
标签: c++ scope using-directives