我听说过使用名称空间std;这是不好的做法,我应该直接使用std::cout和std::cin。这是为什么?声明与std命名空间中的某个变量同名的变量是否有风险?
当前回答
我认为本地或全球使用应取决于应用程序。
因为,当我们在本地使用库时,有时代码会变得一团糟。可读性将下降。
因此,只有在可能发生冲突时,我们才应该在本地使用库。
我不是一个更有经验的人。所以,如果我错了,请告诉我。
其他回答
如果您导入了右侧的头文件,您的全局范围中会突然出现十六进制、左侧、加号或count等名称。如果您不知道std::包含这些名称,这可能会令人惊讶。如果您也尝试在本地使用这些名称,可能会导致一些混淆。
如果所有的标准内容都在自己的命名空间中,那么就不必担心与代码或其他库的名称冲突。
同时使用多个命名空间显然是一个灾难,但在我看来,使用JUST命名空间std和仅使用命名空间std并不是什么大问题,因为重新定义只能由您自己的代码进行。。。
因此,只需将它们的函数视为保留名称,如“int”或“class”即可。
人们不应该对此如此吹毛求疵。你的老师一直都是对的。只需使用一个名称空间;这就是首先使用名称空间的全部意义。您不应该同时使用多个。除非它是你自己的。因此,再次定义不会发生。
另一个原因是惊讶。
如果我看到cout<<blah,而不是std::cout<<blah,我会想:这是什么cout?这是正常的服装吗?有什么特别的吗?
命名空间是为了避免命名冲突。C++基于C,C在函数和变量名方面有很多问题,因为有时来自不同库的函数会发生冲突。因此,库开发人员开始在其函数前面加上库名,如下所示:
foo/foo.h:
void libfoo_foo_foo_h_open(); // the name can be weird then even this one!
C++引入了名称空间,以一种简单的方式解决了这个问题。
假设您有两个名为file和window的库,分别处理文件和窗口,代码如下:
#include <file.h>
#include <window.h>
using namespace file;
using namespace window;
void open() {
...
}
文件.h:
namespace file {
void open(); // What!
}
window.h:
namespace window {
void open(); // Oh no!
}
上面的代码肯定无法编译。
如果你不喜欢键入std::(只有5个字符),你可以一直这样做:(在头文件中不是个好主意)
using s = std;
如果您仍然想使用名称空间std;在您的源文件中,那么您正在引发这个问题,我必须问您“NAMESPACE的目的是什么?”。
您需要能够阅读与您不同风格和最佳实践意见的人编写的代码。如果你只使用cout,没有人会感到困惑。但是,当你有很多名称空间到处飞的时候,你看到这个类,你不太确定它做什么时,让名称空间显式充当某种注释。您可以第一眼看到,“哦,这是一个文件系统操作”或“这是在做网络工作”。