文章目录
- 一.auto关键字
- 1.1auto关键字用法
- 1.2auto关键字的小细节
- 1.3h获取变量类型
- 二.范围for(语法糖)
- 三.nullptr和NULL
一.auto关键字
1.1auto关键字用法
auto这个关键字其实非常简单,用处就是能自动帮你去匹配类型,像下面这段代码:
int main()
{
int a = 10;
double x = 1.1;
int b = a;
auto c = a;//自动匹配c的类型是什么
auto y = x;
return 0;
}
但是这有什么用呢?可能现在刚开始学C++,觉得没什么大用,但是随时知识学的越来越多,后面变量的类型,也会变得很多很长,这时候在用auto,可能就会让代码变的更简洁。
1.2auto关键字的小细节
- auto定义变量时必须对其进行初始化。
- 用auto声明指针类型时,用auto和auto没有任何区别(但如果使用auto,后面的变量类型必须是指针类型的,否则会出错)
- auto声明引用类型时则必须加&
- 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错(因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量)
- auto不能推到的场景
- auto不能作为函数的参数
void TestAuto(auto a)
{
;
}
- auto不能直接用来声明数组
void TestAuto()
{
int a[] = {1,2,3};
auto b[] = {4,5,6};
}
1.3h获取变量类型
int a = 10;
cout << typeid(a).name() << endl;
可以获取a这个变量的类型。
二.范围for(语法糖)
以前在遍历数组的时候可能会这样写:
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << ' ';
}
cout << endl;
return 0;
}
这样写看上去会比较繁琐,所以C++给了我们一个新的东西叫范围for,它是这样用的:
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (auto i : arr)
{
cout <<i << ' ';
}
cout << endl;
return 0;
}
for里面的意思是:自动匹配arr数组里每一位的内容,并赋值给i,然后自动检测数组是否结束。这样一看把原来的代码减轻了不少。
这里的auto可以换成int,但这样写的话,如果数组类型变为double或者其它的,for循环里面的类型也要跟着改。
因为这里是把数组里的元素赋值给变量i,如果想修改数组里的内容需要这样写:
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (auto& i : arr)
{
i *= 2;
cout << i << ' ';
}
cout << endl;
return 0;
}
将变量i变成arr每个元素的一个引用,这样的话修改i就相当于修改数组里的内容了。
三.nullptr和NULL
nullptr是C++自己打的一个补丁,因为在C++里面NULL被宏定义成了0:
因为NULL一般是用来初始化指针的,也就是相当于指针里面的0,但是在C++里面,NULL变成了实实在在的0。所以C++为此添加了nullptr这个关键字,nullptr的用法和C语言中NULL的用法一样都是0被强转成void*类型:
((void*)0)