ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # namespace作用域 在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。 命名空间下可以放函数,变量,结构体,类 **注意** 命名空间必须定义在全局作用域下 命名空间可以嵌套命名空间 ## 头文件作用域 头文件game1.h ~~~ #include<iostream> using namespace std; namespace g1 { void goAtk(); } ~~~ 实现game1.c ~~~ #include "game1.h" //实现的时候要加上作用域 void g1::goAtk() { cout << "测试" << endl; } ~~~ 调用 ~~~ #define _CRT_SECURE_NO_WARNINGS #include <iostream> //标准输入输出流 in输入 out输出 using namespace std; //使用命名空间 std打开一个叫std的房间 #include "game1.h" #include "game2.h" int main() { g1::goAtk(); getchar(); return 0; } ~~~ ## 变量作用域 ~~~ namespace A { int a = 20; } namespace B { int a = 10; } int main() { cout << "A: " << A::a << endl; cout << "B: " << B::a << endl; getchar(); return 0; } ~~~ ## 命名空间嵌套 ~~~ namespace A { int a = 20; namespace B { int a = 10; } } int main() { cout << "A:B: " << A::B::a << endl; getchar(); return 0; } ~~~ ## 命名空间是开放的 ~~~ namespace A { int a = 20; } namespace A { void func() { cout << "hello A" << endl; } } int main() { A::func(); cout << A::a << endl; getchar(); return 0; } ~~~ ## 无命名空间 意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接 ~~~ namespace { int a = 10; void func() { cout << "hello world" << endl; } } int main() { cout << "a: " << a << endl; func(); getchar(); return 0; } ~~~ ## 别名 ~~~ namespace h1 { int a = 10; void func() { cout << "hello world" << endl; } } int main() { namespace h2 = h1; cout << h2::a << endl; getchar(); return 0; } ~~~ # using ## 声明 ~~~ namespace A { int a = 11; } void test() { int a = 22; //using声明 要注意避免二义性问题 //写了using声明后,下面这个代码说明以后看到a都用A这个包 //但是编译器有就近原则,产生二义性,下面代码报错 using A::a; cout << a << endl; } ~~~ ## 编译指令 当引入一个全局的using编译指令时,就为该文件打开了该命名空间,它不会影响任何其他的文件,所以可以在每一个实现文件中调整对命名空间的控制。比如,如果发现某一个实现文件中有太多的using指令而产生的命名冲突,就要对该文件做个简单的改变,通过明确的限定或者using声明来消除名字冲突,这样不需要修改其他的实现文件。 ~~~ namespace A { int a = 11; } void test() { int a = 22; //using编译指令,打开A命名空间,但是编译器还是就近原则 using namespace A; cout << a << endl; } ~~~ 输入cin ~~~ #include <iostream> #include <string> using namespace std; void test01() { //定义字符串变量 string str; //定义 int 变量 int age; //从控制台获取用户输入 cin >> str >> age; //将数据输出到控制台 cout << "str: " << str << " ---age: " << age << endl; } int main() { test01(); getchar(); return EXIT_SUCCESS; } ~~~