using namespace std 语句
using namespace std 语句不是必需的,但它是一个重要的规范,开发者可以决定在自己的程序中是否继续使用它。对于许多程序,特别是比较简单的程序,只把 using namespacer std 放在程序开头是很方便的。这使得所有属于 std 名称空间的的名称,包括 cout、cin、endl,在引用时都不需要带上 std::: 前缀。
如果在程序开头使用了 using namespace std 语句,那么可以不使用 std:: 前缀就可以使用C++标准库的对象,例如:
cout << "hello world!" << endl;
如果不使用 using 语句,则需要使用标准名称来引用某个命名空间里的某个对象,例如:
std::cout << "hello world!" << std::endl;
using namespace语句是访问库中所有(all)符号的一种简便方法,但如果使用多个库,则对所有库中的所以命名空间采用 using namespace 可能会造成名称的冲突。
有选择性的使用 using 语句
通过将下列语句置于程序的开头,使得开发者可以访问每个单独的符号:
using 前缀::符号
例如:
using std::cin;
using std::cout;
using std::endl;
有了这个语句,指定的符号可以不加前缀而被访问。
自定义命名空间
通过使用 namespace 关键字来定义自己的命名空间。例如,在如下的代码中,flower 被声明为全局变量,这样被引用为 “plant::flower”。
#include <iostream>
namespace plant{
int flower = 1;
}
int main() {
std::cout << plant::flower << std::endl;
return 0;
}
当然,采用 using 语句可以使这些变量名由程序直接访问:
using namespace plant;
注意:
命名空间的一个重要目的:规避 using namespace std。
在C/C++开发初期,只有很少的软件库可以用,随着C/C++的普及,可用于C/C++程序开发的库的数量迅速增大。这样会导致一个问题,一个复杂的程序可能会使用多个库,每个库都可以提供数百个对象和函数名。名称冲突的可能性增加了,解决办法是让每一个库创建自己的命名空间。要引用一个命名空间内的某个符号(一个对象或者函数名),必须使用前缀(std 指C/C++ 标准库)或者using 语句提供访问。
应当注意,using 语句只在定义它的作用域中适用,在如下代码中,只有在 Test 函数内直接访问 std 命名空间,而其他函数中不能访问 std 命名空间。
#include <iostream>
void Test(){
using namespace std;
cout << "hello Test" << endl;
}
int main() {
Test();
return 0;
}