using 声明
一条 using 声明语句一次只引入命名空间的一个成员,它使得我们可以清楚地知道程序中所使用的到底是哪个名字。
using 声明的有效范围从 using 声明的地方开始,一直到 using 声明所在的作用域结束为止。
示例:
namespace nsp{
int test = -1;
}
using nsp::test; // using 声明
using 指示
using 指示以关键字 using 开始,后面是关键字namespace 以及命名空间名字。
using 指示使用特定的命名空间中的所有的名字都可见,这样我们就无须再为它们添加任何前缀限定符了。
示例:
using namespace std; // using 指示
头文件与 using 声明和 using 指示
头文件如果在其顶层作用域中含有 using 指示或声明,则会将名字注入到所有包含了该头文件的文件中。通常情况下,头文件应该只负责定义接口部分的名字,而不定义实现部分的名字。
因此头文件最多只能在它的函数或命名空间内使用 using 指示或 using 声明。
using 别名
与 typedef 的功能相同,用于给类型起别名,c++11后推荐使用 using 而非 typedef。
示例:
using user_account = std::map<std::string, std::string> // 给该类型起一个别名
using func_test = int (*)(int, int); // 定义函数指针的类型,如 int add(int a, int b)