
文章目录
- 🚀auto关键字(C++11)
- ✈️auto介绍
- ✈️auto的使用细则
- ✈️auto不能使用的场景
- 🚀范围for(C++11)
- ✈️范围for介绍
- ✈️范围for的使用条件
- 🚀指针空值nullptr(C++11)
🚀auto关键字(C++11)
✈️auto介绍
auto关键字在C++11标准之前基本被程序猿们忽略,因为在C++11标准之前auto仅在局部变量声明时使用,用来指定变量的存储类型,与register的功能类似。
例如,在C++98中:
auto int x;//这是合法的,但并没有什么意义
这里的auto和int一起使用表明x是一个自动存储的局部变量,但这是默认行为,所以auto几乎没有作用。
不过在C++11标准之后,auto作为能自动推导变量类型的关键字,极大方便了编程,提高了编程的灵活性。
//获取vector<int>对象的迭代器
vector<int> a;
vector<int>::iterator it = a.begin();//这么写很麻烦
auto it = a.begin();//这么写就很爽
注意:auto关键字声明的变量必须在声明时初始化,变量的类型将在编译过程中由编译器推导
✈️auto的使用细则
cout << typeid(x).name() << endl //可以打印x的类型
-
auto在声明指针时
auto与auto*没有区别,但是在声明引用时必须加上&int x = 1; auto a = &x; auto* b = &x; auto& c = x; cout << typeid(a).name() << endl; cout << typeid(b).name() << endl; cout << typeid(c).name() << endl;输出:
int* int* int& -
auto在同一行声明多个变量这些变量必须是相同类型auto a = 1,b = 3;//符合规则 auto c = 4,d = 6.0;//这么写编译器会报错
✈️auto不能使用的场景
-
auto不能作为函数参数的类型使用//想下面这样写,编译不会通过 void test(auto a) {} -
auto不能用来声明数组int a[] = {1, 2, 3}; auto b[] = {4, 5, 6};//不能这么用
在C++14标准中auto可以作为函数的返回类型
🚀范围for(C++11)
✈️范围for介绍
对于一个有范围的集合,由程序员来说明范围是多余的,还容易出错,于是在C++11中引入了基于范围的for循环。
for循环后的括号由:分为两部分,第一部分为用于迭代的变量,第二部分为迭代的范围
int a[5] = {0, 1, 2, 3, 4};
for(int i = 0;i < 5; ++i){
cout << a[i] << endl;
}
for(int e : a){
cout << e << endl;
}
上面这两种for循环等价,上面的范围for循环中的e会依次拿到数组a中的每一个元素。
**注意:**范围for同样可以continue和break,与普通的for循环一致。
✈️范围for的使用条件
- 对于原生数组可以直接使用范围
for循环,范围是整个数组元素 - 对于
类而言,必须实现begin()和end()方法,才能使用范围for循环- 对于
begin()方法要返回指向容器第一个元素的迭代器,end()方法要返回指向容器结尾后一个位置的迭代器
- 对于
关于迭代器,我将会在后续文章中讲述。
🚀指针空值nullptr(C++11)
在C语言中,我们常使用NULL来给指针置空,但是NULL是一个宏被定义为0或者是void*(0),这会导致类型不明确,因为0也可以被视为整型,而且使用NULL还要包头文件,麻烦。
但是在C++11中引入了nullptr来给指针置空,nullptr是一个关键字不用包头文件,而且他的类型明确为指针,类型不存在歧义,建议以后大家给指针置空使用nullptr。
好了,就分享到这,如果有帮到您,就帮我点个赞呗,感谢大家支持!!!



















