> 文档中心 > C++auto,范围for,nullptr

C++auto,范围for,nullptr

目录

auto 🚀

auto的使用细则 🚀

1. auto与指针和引用结合起来使用 🚀

2. 在同一行定义多个变量 🚀

3. auto不能推导的场景 🚀

作用 🚀

1. 自动推导类型 🚀

2. 简化代码 🚀

3. 范围for 🚀

nullptr 🚀


C语言总结在这

常见八大排序在这

作者和朋友建立的社区:非科班转码社区-CSDN社区云💖💛💙

期待hxd的支持哈🎉 🎉 🎉

最后是打鸡血环节:你只管努力,剩下的交给天意🚀 🚀 🚀 

auto 🚀

在早期 C/C++ auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它, C++11 中,标准委员会赋予了 auto 全新的含义即: auto 不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器, auto 声明的变量必须由编译器在编译时期推导而得

auto的使用细则 🚀

1. auto与指针和引用结合起来使用 🚀

auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &

2. 在同一行定义多个变量 🚀

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对 第一个类型进行推导,然后用推导出来的类型定义其他变量

3. auto不能推导的场景 🚀

1. auto 不能作为函数的参数

// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导void TestAuto(auto a){}

2. auto 不能直接用来声明数组

void TestAuto(){ int a[] = {1,2,3}; auto b[] = {4,5,6};}

3. 为了避免与 C++98 中的 auto 发生混淆, C++11 只保留了 auto 作为类型指示符的用法 4. auto 在实际中最常见的优势用法就是跟以后会讲到的 C++11 提供的新式 for 循环,还有 lambda 表达式等进行配合使用。

作用 🚀

1. 自动推导类型 🚀

typeid()是用来求里面的数据类型的,返回的是一个字符串,也可以求自定义类型 

PS: 使用 auto 定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导 auto 的实际类 。因此 auto 并非是一种 类型 的声明,而是一个类型声明时的 占位符 ,编译器在编译期会将 auto 替换为 变量实际的类型

2. 简化代码 🚀

这个目前体会不到,在后面写较长代码的时候auto很方便 

3. 范围for 🚀

1. 直接遍历打印数组,比原来方便很多哈

//依次自动取arr中的数据,赋值给e,自动判断结束

对于一个 有范围的集合 而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此 C++11 中引入了基于范围的for 循环。 for 循环后的括号由冒号 分为两部分:第一部分是范围内用于迭代的变量, 第二部分则表示被迭代的范围 注意:与普通循环类似,可以用 continue 来结束本次循环,也可以用 break 来跳出整个循环

2. 如果要改变原数组的值

上面是赋值给e,现在可以可以加上引用(&),变成 e就是原数组的数据,这样就可以改变了

 3. 范围for里面不一定要是auto,也可以是其他内置类型(如上图int)

范围 for 的使用条件  1. for 循环迭代的范围必须是确定的 对于数组而言,就是数组中第一个元素和最后一个元素的范围 ;对于类而言,应该提供 begin end 的方法,begin end 就是 for 循环迭代的范围。 注意:以下代码就有问题,因为 for 的范围不确定因为传过来的是指针

void TestFor(int array[]){ for(auto& e : array) cout<< e <<endl; }

2. 迭代的对象要实现 ++ == 的操作 ( 关于迭代器这个问题,以后会讲,现在大家了解一下就可以了 )

nullptr 🚀

在C++中

nullptr 相当于 0(void*)
0 和 NULL 在C++都是 0(但是C语言中NULL是void*)

注意:

1. 在使用 nullptr 表示指针空值时,不需要包含头文件,因为 nullptr C++11 作为新关键字引入的 2. C++11 中, sizeof(nullptr) sizeof((void*)0) 所占的字节数相同。 3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用 nullptr

最后的最后,创作不易,希望读者三连支持💖

赠人玫瑰,手有余香💖