为什么在c ++语言中使用命名空间std是必须的?

时间:2016-11-02 13:04:54

标签: c++ using

这是一个简单的程序,我的问题是要知道为什么使用命名空间std是必须的?为什么不使用这个程序就不遵守程序?

>>> import re
>>> matter = """
... print "Anything goes here"
... print "Anything"
... print "Something goes here"
... """
>>> print(re.sub(r'print\s+"(.*)"', r'print("\1")', matter))

print("Anything goes here")
print("Anything")
print("Something goes here")

4 个答案:

答案 0 :(得分:11)

  

为什么必须使用namespace std?

不是。

事实上,I would recommend against it

但是,如果您不编写using namespace std,则需要完全限定从标准库中使用的名称。这意味着std::string代替stringstd::cout代替cout,等等。

如果您的图书已经没有告诉您,那么您需要a better book

答案 1 :(得分:8)

你不应该(但可以)使用

using namespace std;

您可以在该命名空间中的每个对象之前使用std::,例如:

std::cout << "Enter First Value" << std::endl;
std::cin >> a;

答案 2 :(得分:1)

一般来说,不推荐使用Border,因为它不受控制地从名称空间导入所有内容。

对于非常小的工具或本地范围,这可能没问题,但在您作为接口提供的头文件中不应该这样做。

可能没问题的一个方便的事情是将一些经常使用的标识符导入到(cpp file global-not header)命名空间中。

using namespace

另请注意“轨道中的轻盈竞赛”链接

答案 3 :(得分:0)

如果没有名称空间,您应该关心自定义名称是否与包含的名称冲突。代码的using namespace部分是语法上的甜味剂:您不必为所有出现的std::范围设置。您的代码可以更具可读性,但缩小了无范围名称的集合。请考虑以下示例:

#include <cstdio>
#include <iostream>

int main()
{
    char endl[] = "xy";
    std::cout << "[" << std::endl << "]";
    std::cout << "[" << endl << "]";
    return 0;
}

如果您想将名称endl用于自定义目的,则不能使用using namespace指令,否则会变得不明确。