文章目录最近在准备考试,就随便写点吧
- 命名空间
- 1. namespace
- 2. 作用域限定符 ::
- 3. 命名空间的使用
- 4. 命名空间嵌套使用
- 5. 命名空间命名重复
- 二、C++输入输出
- 1. C++库的头文件
- 2. 输入输出流
命名空间
c语言中如果出现
#include#include int rand = 0; int main() { printf("%d", rand); return 0; }
则会出现重命名的问题
运行之后结果如上图
-
同一作用域中不能出现相同变量
-
在stdlib.h文件中已经定义了rand变量
C++解决了这个问题
C++关键字
1. namespace在C/C++中,函数和类的名称存在于全局作用域中,可能会导致很多冲突。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的
- 在不同的作用域里定义变量相互不影响
- 类似全局变量和局部变量一样,但优先使用局部变量(局部域中变量)
- 命名空间必须是定义在全局的
2. 作用域限定符 ::
#include#include namespace n1 { int rand = 0; } int main() { //用n1作用域中的变量 printf("%d", n1::rand); return 0; }
之前在c语言中,局部变量和全局变量同时存在的时候
如果要使用全局变量
printf("%d", ::rand);
//rand前面空表示用全局变量中的参数
3. 命名空间的使用
- 不能在命名空间中进行赋值操作
- 本质是全局变量,放在静态区
- 初始化在main函数之前
- 常用定义,指定隔离
#include#include namespace n1 { int rand = 0; int add(int x, int y) { return x + y; } struct str { int a; struct str* node; }; } int main() { //用n1作用域中的变量 n1::rand = 2; //函数调用 n1::add(1, 2); //结构体 struct n1::str s; s.a = 0; return 0; }
- 不用作用域限定符,using namesapce
#include//#include namespace n1 { int rand = 0; } using namespace n1; int main() { rand = 1; return 0; }
- 全部展开,隔离失效
- 展开某一个
#include//#include namespace n1 { int rand = 0; int a = 2; } using n1::rand; int main() { rand = 1; return 0; }
4. 命名空间嵌套使用
#include#include namespace n1 { int rand = 0; namespace n2 { int rand = 2; } } int main() { //嵌套 n1::rand = 1; n1::n2::rand = 10; return 0; }
5. 命名空间命名重复
- 不会出现问题,只是在编译的时候合并在一起
#include#include namespace n1 { int rand = 0; namespace n2 { int rand = 2; } } namespace n1 { int b = 0; } int main() { //命名重复 n1::rand = 1; n1::b = 4; return 0; }
二、C++输入输出 1. C++库的头文件
类似c语言中的stdio.h
- C++库的头文件在iostream中(输入输出流)
#includeusing namespace std; int main() { int a = 10; cout << a << endl; return 0; }
- 这里的C++库的实现的定义在std这个标准的命名空间中
- 这样就防止你定义的变量和库里面的变量冲突的问题
- 但依然存在问题就是在大的工程项目中,如果依然这样使用,可能会造成问题
- 所以还是建议用局部命名空间,或者作用域限定符指向命名空间
2. 输入输出流
-
使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。
-
这两个都可以自动识别类型
-
endl相当于n
#includeusing namespace std; int main() { int a = 10; cin >> a; cout << a << endl; return 0; }
如果要控制小数点位数,还是建议用printf写



