我听说过使用名称空间std;这是不好的做法,我应该直接使用std::cout和std::cin。这是为什么?声明与std命名空间中的某个变量同名的变量是否有风险?
当前回答
我认为本地或全球使用应取决于应用程序。
因为,当我们在本地使用库时,有时代码会变得一团糟。可读性将下降。
因此,只有在可能发生冲突时,我们才应该在本地使用库。
我不是一个更有经验的人。所以,如果我错了,请告诉我。
其他回答
我也认为这是一种糟糕的做法。为什么?就在一天,我认为名称空间的功能是划分内容,所以我不应该将所有内容都放在一个全局包中而破坏它。
然而,如果我经常使用“cout”和“cin”,我会写:使用std::cout;使用std::cin;在.cpp文件中(当它使用include传播时,不会在头文件中)。我想,没有一个理智的人会说出一条小溪的名字
下面是一个示例,展示了如何使用命名空间std;可能会导致名称冲突问题:
无法在C中定义全局变量++
在本例中,一个非常通用的算法名称(std::count)与一个非常合理的变量名称(count)冲突。
它不会使您的软件或项目性能更差。在源代码开头包含名称空间还不错。using namespace std指令的包含根据您的需求以及开发软件或项目的方式而有所不同。
命名空间std包含C++标准函数和变量。当您经常使用C++标准函数时,这个名称空间非常有用。
如本页所述:使用命名空间std的语句通常被认为是错误的实践此语句的替代方法是指定使用作用域运算符(::)将标识符所属的命名空间每次我们声明一个类型。请参阅以下意见:在源文件中使用“using namespace std”没有问题当您大量使用命名空间并确信任何东西都不会碰撞。
有些人曾说过,在源文件中包含using命名空间std是一种不好的做法,因为您正在从该命名空间调用所有函数和变量。当您想定义一个与命名空间std中包含的另一个函数同名的新函数时,您会重载该函数,因为编译或执行可能会产生问题。它不会像您期望的那样编译或执行。
如本页所述:尽管该语句使我们不必在任何时候输入std::我们希望访问std命名空间中定义的类或类型将整个std命名空间导入当前命名空间该计划的一部分。让我们举几个例子来理解为什么可能不是什么好事...现在,在开发的后期阶段,我们希望使用cout是在某个名为“foo”的库中自定义实现的(用于示例)...注意这里有一个歧义,cout指向哪个库?编译器可能会检测到这一点,而不会编译程序。在最坏的情况下在这种情况下,程序仍可能编译,但调用了错误的函数,因为我们从未指定标识符属于哪个命名空间。
这是一种糟糕的做法,通常被称为全局命名空间污染。当多个名称空间具有相同的函数名和签名时,可能会出现问题,那么编译器决定调用哪个名称空间是不明确的,当您使用std::cout这样的函数调用指定名称空间时,这一切都可以避免。希望这有帮助。:)
这取决于它的位置。如果它是一个公共的头,那么通过将其合并到全局名称空间中,可以减小名称空间的值。请记住,这可能是制作模块全局的一种简单方法。