我听说过使用名称空间std;这是不好的做法,我应该直接使用std::cout和std::cin。这是为什么?声明与std命名空间中的某个变量同名的变量是否有风险?
当前回答
这取决于它的位置。如果它是一个公共的头,那么通过将其合并到全局名称空间中,可以减小名称空间的值。请记住,这可能是制作模块全局的一种简单方法。
其他回答
另一个原因是惊讶。
如果我看到cout<<blah,而不是std::cout<<blah,我会想:这是什么cout?这是正常的服装吗?有什么特别的吗?
您需要能够阅读与您不同风格和最佳实践意见的人编写的代码。如果你只使用cout,没有人会感到困惑。但是,当你有很多名称空间到处飞的时候,你看到这个类,你不太确定它做什么时,让名称空间显式充当某种注释。您可以第一眼看到,“哦,这是一个文件系统操作”或“这是在做网络工作”。
同时使用多个命名空间显然是一个灾难,但在我看来,使用JUST命名空间std和仅使用命名空间std并不是什么大问题,因为重新定义只能由您自己的代码进行。。。
因此,只需将它们的函数视为保留名称,如“int”或“class”即可。
人们不应该对此如此吹毛求疵。你的老师一直都是对的。只需使用一个名称空间;这就是首先使用名称空间的全部意义。您不应该同时使用多个。除非它是你自己的。因此,再次定义不会发生。
我认为本地或全球使用应取决于应用程序。
因为,当我们在本地使用库时,有时代码会变得一团糟。可读性将下降。
因此,只有在可能发生冲突时,我们才应该在本地使用库。
我不是一个更有经验的人。所以,如果我错了,请告诉我。
有一个非常简单的答案:这是防御性编程。您知道,使用名称空间std;-可以使std::size_t、std::cout等的使用更容易一些我希望您不必相信这样的指令在标题中没有位置!然而,在翻译单元中,您可能会受到诱惑。。。
作为std命名空间一部分的类型、类等随着每次C++修订而增加。如果放松std::限定符,可能会有太多的歧义。放松std中经常使用的名称的限定符是完全合理的,例如,使用std::fprintf;,或者更可能的是:使用std::size_t;-但是,除非这些已经是语言的很好理解的部分(或者特别是C库的std包装),否则只使用限定符。
当您可以使用typedef并结合自动和decltype推理时,从可读性/可维护性的角度来看,实际上没有什么好处。