目录
1.命名空间
1.1认识命名空间
在我们刚接触写C++的时候,我们都会写的两行代码如下
#include<iostream>
using namepspace std;
int main()
{
...
return 0
}
using namespace std;即是我们定义的命名空间,那你知道这句代码的作用是什么吗?
简单来讲:命名空间是对标识符的名称进行本地化,以避免命名冲突或名字污染
举个例子吧:
#include <stdio.h> #include <stdlib.h> int rand = 0; int main() { printf("%d ", rand); return 0; }
这段代码运行如下
报错的原因是rand是一个全局函数 可我们又定义了一个int rand 编译器都不知道该输出什么!
所以啊,在C++中,为了防止这个问题出现,也就提出了命名空间这个概念,它的作用就是防止重名(比如头文件等)
using namespace std;
这个呢 就是使用std命名空间(std是C++标准库的命名空间),在运行的时候,编译器会先去std中寻找,如果找不到再从全局中找,这样就有效的填补了C语言的坑!
1.2定义命名空间
using namespace xxx;
定义一个命名空间,我们需要用到namespace这个关键字,后面接着“XXX”就是我们定义命名空间的名字,{}里即为命名空间的成员
namespace bit
{
int rand = 10;
}
命名空间不仅可以定义变量还可以函数,结构体等
namespace bit
{
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
int val;
struct Node* next;
};
}
命名空间还可以嵌套定义
namespace bit
{
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
namespace xxx
{
int rand = 1;
}
}
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
1.3使用命名空间
我们学会如何定义一个命名空间的时候,我们也要学会如何去使用,这个时候我们就应该先认识一个符号——::,它叫域作用限定符。
mespace bit
{
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
namespace xxx
{
int rand = 1;
}
}
像这段代码,我们如何取rand的值呢,rand的值到底是10还是1呢?
int main()
{
printf("%d\n", bit::rand);
printf("%d\n", bit::xxx::rand);
}
bit::rand 即是取bit这个命名空间的rand,rand=10。
bit::xxx::rand 即是取bit这个嵌套命名空间xxx中的rand, rand=1。
运行结果如下:
2.流插入和流提取
2.1流提取
这就很好奇了,在我们学习C语言中好像从来没学过流插入和流提取,我们只学过标准输入流stdin
和标准输出流stdout 也就是我们在写C语言代码时包含的头文件<stdio.h>
那我接下来介绍一下流插入和流提取
这显示cout和endl未声明的标识符,其实啊 cout和endl是在std这个标准库中,那我们该如何修改我们的代码呢?
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int i = 1;
cout << i << endl;
return 0;
}
#include <iostream>定义了标准输入,输出流对象
cout是全局的流对象,endl是特殊的C++符号,表示换行输出
<<是流提取运算符
输出结果如下:
2.2流插入
在C语言中,我们学过一个scanf函数
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
printf("%d ", a);
return 0;
}
在C++中我们有个更方便的关键字——cin,与scanf的作用一样
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
}
>>是流插入运算符。
cin也是std标准库里,所以我们要using namespace std。
2.3重点
重点!cin和cout可以自动识别类型
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
cin >> a >> b;
cout << a << " " << b << endl;
return 0;
}
这不像scanf当我们要输入小数的时候要用%lf,输入单个字符的时候要用%c,在C++中用cin是不是很方便!不需要写类型直接cin提取
关于C++中流插入和流提取为什么能自动识别类型的原因,我后期会单独出一期讲解为什么能自动识别类型!
以上就是全篇内容了!