目录
①auto定义变量时必须要进行初始化,否则编译器没有办法进行推演
1、auto简介:
C++11中,auto被赋予了新的含义:用来定义变量的一个占位符,告诉编译器在编译阶段,
推到初始化表达式的类型作为变量真正的类型
2、auto的使用规则
①auto定义变量时必须要进行初始化,否则编译器没有办法进行推演
②auto与指针和引用结合来使用
auto定义指针变量时加不加 * 都无所谓
int a = 10;
auto pa = &a;
auto* pb = &a;
cout << typeid(pa).name() << endl; // int *
cout << typeid(pb).name() << endl; // int *
auto定义引用时:
错误定义:如果不加 & 符号 那么所定义出来的变量和原变量完全不是同一个变量,也就不是对原变量起别名了,是一个新的变量。可以看到rb 与 a 的地址不相同,所以修改rb不会改变a的值。
正确定义:auto声明引用类型时必须加上&。
需要加上&符号 auto& ra = a; 才是定义一个引用。
③当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量
④可以判断函数返回值
3、 auto不能推导的场景
①不能作为函数形参
②auto不能用来声明数组
4、范围for !!!
传统的for循环:
int main()
{
// 定义一个数组,数组中包含10个整形的元素
int array[] = { 1,2,3,4,5,6,7,8,9,0 };
// 将数组中的内容打印出来
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
cout << array[i] << " ";
}
cout << endl;
// 给数组中的每个元素乘以2
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
array[i] *= 2;
}
// 输出乘以2之后的结果
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
cout << array[i] << " ";
}
cout << endl;
return 0;
}
看这个:精简干练!!!
for循环后的括号由冒号“ :” 分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示迭代的范围。
int main()
{
int array[] = { 1,2,3,4,5,6,7,8,9,0 };
for (auto e : array)
{
cout << e << " "; // 进行打印
}
cout << endl;
for (auto e : array)
{
e *= 2; // 每个元素乘以2 不过只是对e变量
}
for (auto& e : array)
{
e *= 2; // 利用e作为数组元素的别名进行翻倍处理
}
for (auto e : array)
{
cout << e << " "; // 再次进行打印
} // 为{2,4,6,8,10,12,14,16,18,0}
cout << endl;
return 0;
}
注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。
它是具有使用条件的 也就是冒号后面的范围必须是已知的。
5、不用NULL了!!!
// 在C++11之前,统一使用NULL表示空值指针
int main()
{
// C++98
int* p1 = NULL;
// C++11
int* p2 = nullptr;
return 0;
}