文章目录
- 🚀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
。
好了,就分享到这,如果有帮到您,就帮我点个赞呗,感谢大家支持!!!