在 C++ 中使用命名空间

using namespace in c++

提问人:Ken Za 提问时间:11/8/2021 更新时间:11/8/2021 访问量:129

问:

我开始理解为什么在 c++ 中被认为是不好的做法 但是让我们考虑例如 2 个(假设的)库 “std” 和 “sfd” ,它们都包含一个函数 “run()”。
以下内容可以还是仍然是一个问题:
(如果我想从“std”调用“run()”)
using namespace std;

   using namespace std;  
   using namespace sfd;  
   int main(){
       std::run();
}  

(如果我想从“sfd”调用“run()”)

   using namespace std;
   using namespace sfd;
   int main(){
   sfd::run();
}  
C++ 命名空间 std using 指令

评论


答:

2赞 Vlad from Moscow 11/8/2021 #1

没有问题,因为您在函数调用中使用了限定名。

如果程序在调用中使用非限定函数名称,则程序的格式不正确,例如

run();

在这种情况下,会有歧义。

评论

0赞 Ken Za 11/8/2021
但是我从来没有见过有人在解决这个问题时提出这个解决方案,你怎么看?
0赞 Vlad from Moscow 11/8/2021
@KenZa 通常强调排除 using 指令。
0赞 Ken Za 11/8/2021
我想我不知道那是什么,但在我看来,我在问题中提到的方式更好,你同意吗?
0赞 Vlad from Moscow 11/8/2021
@KenZa 最好不要使用 using 指令或在最小范围内使用它。
1赞 Vlad from Moscow 11/8/2021
@KenZa 因为一般来说,许多实体可能会存在名称冲突。由 using 指令引入。
2赞 digito_evo 11/8/2021 #2

使用的主要目的是避免每次想要访问其成员之一时都键入该命名空间的名称(如和),例如节省时间并使代码看起来更干净一些。不过,您的解决方案没有问题。它有效。using namespace whatever;stdsfd

但同样,如果您最终要添加到需要它的任何函数,为什么还要在源文件的顶部使用呢?using namespace std;std::

您还可以在(函数、循环等)作用域中写入,这样它就不会污染该特定源文件的整个命名空间。using namespace std;

评论

0赞 Ken Za 11/8/2021
只有当该函数对我声明的两个命名空间都是通用的时,我才会添加,否则我不会