【发布时间】:2021-12-06 11:00:29
【问题描述】:
using namespace X;
cout << var;
using Y::var;
cout << var;
假设我有一个命名空间 X 和一个命名空间 Y,它们都包含一个名为 var 的 int 类型变量。当我说using namespace X; 时,我想象发生的事情是,如果我使用一些不在全局名称范围内的变量,基本上会发生的情况是没问题我会在namespace X 中寻找var 但现在我也使用@987654326 @这到底是什么意思?这只是说 var 与 Y::var 相同吗?但是在那种情况下,using namespace X 发生了什么,它甚至不会在那里寻找 var,因为我说我正在使用Y::var?
【问题讨论】:
-
只需创建一个示例并检查编译器会做什么。这是最好的学习方式。如果我们为您提供答案,您将在 5 分钟内忘记它。
-
取决于上下文。创建一个minimal reproducible example。与其描述程序是怎样的,不如向我们展示程序。
-
有一个程序可以回答这些类型的问题。 You can ask it
-
我已经检查了编译器做了什么,我得到了我所期望的使用命名空间 XI 打印的 var 并且我在该命名空间中得到了 var 然后当我使用 Y::var 并打印出来时在 Y 命名空间中得到了 var 我只是想问一下以确保我之前所说的对吗?我说我使用 Y:::var 只是覆盖了使用命名空间 X 的那种?至少对于 var 抱歉,如果我没有很好地解释这一点,但是当我说我正在使用 Y::var 时,基本上是在说好的忽略我正在使用的其他命名空间,如果你在我正在谈论的代码中看到 var Y::var?
-
"我正在使用 Y:::var 类型只是覆盖使用命名空间 X 类型?" - 它只覆盖
X::var。X的其余部分仍在使用中。
标签: c++ namespaces name-lookup using-directives using-declaration