在 C++ 中使用命名空间
using namespace in c++
我开始明白为什么 using namespace std;
在 c++ 中被认为是不好的做法
但是让我们考虑例如 2 个(假设的)库“std”和“sfd”,它们都包含一个函数“运行()”。
以下是可以的还是仍然是一个问题:
(如果我想从“std”调用“运行()”)
using namespace std;
using namespace sfd;
int main(){
std::run();
}
(如果我想从“sfd”调用“运行()”)
using namespace std;
using namespace sfd;
int main(){
sfd::run();
}
没有问题,因为您在函数调用中使用了限定名称。
如果您在程序的调用中使用非限定函数名称,程序将是非良构的,例如
run();
这样的话会产生歧义。
使用 using namespace whatever;
的主要目的是避免每次您想访问其成员之一时键入该名称空间的名称(如 std
和 sfd
) (出于诸如节省时间以及使代码看起来更简洁等原因)。不过,您的解决方案没有问题。有效。
但同样,如果您最终要将 std::
添加到需要它的任何函数中,为什么要在源文件的顶部使用 using namespace std;
?
您还可以在(函数、循环等)范围内编写 using namespace std;
,这样它就不会污染该特定源文件的整个命名空间。
我开始明白为什么 using namespace std;
在 c++ 中被认为是不好的做法
但是让我们考虑例如 2 个(假设的)库“std”和“sfd”,它们都包含一个函数“运行()”。
以下是可以的还是仍然是一个问题:
(如果我想从“std”调用“运行()”)
using namespace std;
using namespace sfd;
int main(){
std::run();
}
(如果我想从“sfd”调用“运行()”)
using namespace std;
using namespace sfd;
int main(){
sfd::run();
}
没有问题,因为您在函数调用中使用了限定名称。
如果您在程序的调用中使用非限定函数名称,程序将是非良构的,例如
run();
这样的话会产生歧义。
使用 using namespace whatever;
的主要目的是避免每次您想访问其成员之一时键入该名称空间的名称(如 std
和 sfd
) (出于诸如节省时间以及使代码看起来更简洁等原因)。不过,您的解决方案没有问题。有效。
但同样,如果您最终要将 std::
添加到需要它的任何函数中,为什么要在源文件的顶部使用 using namespace std;
?
您还可以在(函数、循环等)范围内编写 using namespace std;
,这样它就不会污染该特定源文件的整个命名空间。