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