这是一个简单的程序,我的问题是要知道为什么使用命名空间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")
答案 0 :(得分:11)
为什么必须使用namespace std?
不是。
事实上,I would recommend against it。
但是,如果您不编写using namespace std
,则需要完全限定从标准库中使用的名称。这意味着std::string
代替string
,std::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
指令,否则会变得不明确。