使用“使用”表示“使用”。在头文件中
我明白,我不应该在头文件中使用它:
using namespace foo;
因为它为使用我的头文件的任何人带来了全局范围内的名称空间 foo 。
如果我在自己的命名空间中执行此操作,可以防止这种情况发生吗?例如这样:
namespace my_lib
{
using namespace foo;
// my stuff
// ...
}
现在 using 命名空间 foo 应该被限制在命名空间 my_lib 的范围内,对吗?
I understood, that I should not use this in a header file:
using namespace foo;
Because it brings the namespace foo in the global scope for anyone who uses my header file.
Can I prevent this from happening, if I do it in my own namespace? For example like this:
namespace my_lib
{
using namespace foo;
// my stuff
// ...
}
Now the using namespace foo should be restricted to the scope of the namespace my_lib, right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的。这比在全局级别使用
using namespace foo
更好。如果您使用
foo::name
语法,效果会更好。是的。它将命名空间
foo
中的所有名称引入命名空间my_lib
中,这可能会导致my_lib
中的名称冲突。这就是为什么foo::name
是最可取的方法。Yes. That is better than using
using namespace foo
at global level.Yet better would be if you use
foo::name
syntax.Yes. It brings all the names from the namespace
foo
in the namespacemy_lib
which might cause name collisions inmy_lib
. That is whyfoo::name
is the most preferrable approach.是的,如果你这样做,那么它只会将 foo 中的所有名称带入 my_lib 中——正如其他人指出的那样,这可能是理想的,也可能不是理想的。
除了其他人所说的之外,我还观察到的一件事是,您可以使用“命名空间内的 using 指令”的想法作为模拟仅限于类范围的 using 指令的方法。请注意,这是非法的:
但您可以这样做:
只是认为如果您真正想要的是能够定义某些内容(例如类)而无需一直编写特定的名称空间前缀,您可能会发现它很有用。
Yes, if you do that then it just brings all the names from
foo
intomy_lib
-- which, as others have pointed out, may or may not be desirable.One thing I would observe in addition to what others have said is that you can use the 'using directive within a namespace' idea as a way of simulating a using directive that is restricted to class scope. Note that this is illegal:
But you can do this instead:
Just thought you might find it useful if what you really want is to be able to define something (like a class) without writing a particular namespace prefix the whole time.