C++11方便又常用的特性
不会吧,C++20都出了,不会还有人在学C++11的新特性吧(就是我)。这篇文章介绍一些C++11的方便的语法糖/特性。
auto类型推导
这可以说是C++11中最方便最常用的特性了,一旦开始用就再也回不去了。
1 | float foo(); |
这个特性在遍历stl容器的时候很好用,例:
1 | std::vector<int> array; |
要注意auto
可以用于函数返回值但不能用于函数参数
1 | auto foo(int a |
范围for循环
范围for循环又比上面提到的遍历容器的方式更简单了,上代码:
1 | for(int i : a){} //a可以是int[]、vector<int>、queue<double>等等,很灵活,甚至自己写的类只要定义了begin()、end()、++等函数也可以使用这个语法糖 |
lambda表达式
python里面的lambda表达式实在是好用,C++11里面也有lambda表达式,不过C++毕竟是静态语言,用起来还是没有python里面的灵活。
格式:
1 | [捕获列表] (函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体} |
其中,捕获列表有:
- [] 表示不捕获任何变量
- [=] 表示按值传递的方法捕获父作用域的所有变量
- [&] 表示按引用传递的方法捕获父作用域的所有变量
- [=, &a] 表示按值传递的方法捕获父作用域的所有变量,但按引用传递的方法捕获变量a
- [&, a] 表示按引用传递的方法捕获父作用域的所有变量,但按值传递的方法捕获变量a
1 |
|
nullptr
C++11提供了nullptr
关键字来代替以前的NULL
。NULL
的宏定义是#define NULL ((void *)0)
,在隐式类型转换的时候会出现二义性。nullptr
解决了这个问题,应该使用nullptr
而不是NULL
。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cyrus' Blog!
评论