一 . 命名空间
1. 出现的原因
原因:为了防止我们自定义的标识符和C++库中的标识符冲突,通过定义命名空间的办法,来使得自行定义的和库中的区分开来。
举例代码如下:
#include <stdio.h>
#include <stdlib.h>
//rand本来是stdlib.h库中的函数
namespace bit
{
int rand = 0; //通过命名空间自行创建的int型的rand变量
}
int main()
{
printf("%p\n", rand); //stdlib.h库中的函数rand
printf("%d\n", bit::rand); //我们创建的rand
return 0;
}
运行的结果:
通过这种方法来消除我们和库因为同名而造成的冲突。
2. 数据使用的优先级
对于程序中的变量,编译器对它的查找是有优先级的
编译默认查找有高到低依次为:
当前的局部域
全局域
展开的命名空间
#include <iostream>
//2.全局
int temp = 2;
//3.命名空间
namespace bit
{
int temp = 3;
}
//展开命名空间
using namespace std;
using namespace bit;
int main()
{
//1.局部
int temp = 1;
cout << temp << endl;
//优先级:局部>全局>命名空间
// temp = 1 > =2 > =3
return 0;
}
3. 三种方式使用命名空间
指定访问
全展开
指定展开的某一个
具体写法格式和使用如下:
#include <iostream>
//创建好命名空间
namespace bit
{
int LittleBit = 1;
int BigDream = 0;
}
int main()
{
//1.指定访问 格式: 命名空间名::标识符
// 如: bit::LittleBit
printf("%s\n", "指定访问");
printf("%d\n", bit::LittleBit);
printf("%d\n", bit::BigDream);
//2.全展开 格式:using namespace 命名空间名
// 如:using namespace bit;
// 此时的标识符可直接使用
using namespace bit;
printf("%s\n", "全展开");
printf("%d\n", LittleBit);
printf("%d\n", BigDream);
//3.指定单一展开 格式:using 命名空间名::标识符
// 如:using bit::LittleBit;
// 此时的标识符可直接使用
using bit::LittleBit;
using bit::BigDream;
printf("%s\n", "指定单一展开");
printf("%d\n", LittleBit);
printf("%d\n", BigDream);
return 0;
}
4.命名空间可包裹和合并命名空间
#include <iostream>
namespace bit
{
int a = 1;
//命名空间可内部嵌套另一个命名空间
namespace dream
{
int b = 2;
}
}
//同名的命名空间将合并成一个
namespace bit
{
int c = 3;
}
using namespace std;
using namespace bit;
using namespace dream;
int main()
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
二 . C++的输入和输出
std::cin 一 输入流;
std::cout 一 输出流;
cin和cout都具有自动识别类型的功能。
三 . 缺省函数
缺省参数是指在参数列表(函数特征标)中对参数进行有规则的赋值。
1.参数的值的规则
其中参数的值是有规则的:
1.未进行传参 则会使用定义时设置的值。
2.进行传参 则值会被我们传入的参数所更新替代。
代码如下:
#include <iostream>
using namespace std;
//缺省参数
void FuncA(int a = 1)
{
cout << a << endl;
}
int main()
{
FuncA(); //未进行传参 则会使用定义时设置的值
FuncA(0); // 进行传参 则值会被我们传入的参数所更新替代
return 0;
}
2. 全缺省函数和半缺省函数
全缺省函数指的是参数列表中所有的参数都在定义时设置了初值
半缺省函数指的是参数列表中一部分参数没有设置初值
全缺省函数传值是不能跳跃传递的,必须要按照顺序传参,比如:
#include <iostream>
using namespace std;
//全缺省参数
void FuncB(int a = 1, int b = 2, int c = 3)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
int main()
{
FuncB(); // 1 2 3
FuncB(4); // 4 2 3
FuncB(4,5); // 4 5 3
FuncB(4, 5, 6); // 4 5 6
//FuncB(4, , 6); //不允许跳跃传值 编译时会报错
return 0;
}
半缺省函数只能从参数列表的右边开始缺省(这里的缺省指的是函数定义时对参数设置初值),而且不允许跳跃式的缺省和传参,代码示例:
#include <iostream>
using namespace std;
//左缺省
//void FuncC(int a = 1, int b = 2, int c) //编译时会报错
//{
//
//}
//跳跃式缺省
//void FuncD(int a, int b = 1, int c) //编译时会报错
//{
//
//}
//右缺省
void FuncE(int a, int b = 2, int c = 3)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
int main()
{
FuncE(4); //4 2 3
FuncE(4, 5, 6); //4 5 6
//跳跃式传递
//FuncE(4, , 5); //编译前就会报错 不允许
return 0;
}
本博客仅供个人参考,如有错误请多多包含。
Aruinsches-C++初阶日志-3/28/2024