文章目录
- C++11
- 一、nullptr
-
- 二、auto
-
- 三、lambda
-
- 四、基于范围的for循环
-
C++11
一、nullptr
1.含义
表示空指针
2.作用
解决NULL在函数重载时的歧义性
//c++中将NULL定义为整数0,一个指针的值为0,认为是空指针
//c语言中NULL为void类型的指针
#ifndef NULL
#ifdef _cpluscplus
#define NULL 0
#else
#define NULL ((void*)0)
#endif
#endif
3.NULL存在的问题
void fun(int i){};
void fun(char *p){};
fun(NULL); //C++中会调用第一个,认为是零
fun(nullptr); //调用第二个
 
二、auto
1.含义
类型声明的占位符,会自定推导类型。但不能滥用,多了以后代码可读性差
int x = 0;
auto *a = &x; //a -> int* auto推导为int
auto b = &x; //b -> int* auto推导为int*
2.限制
-
不能用于函数参数
-
不能用于非静态变量
-
不能定义数组
-
不能推导模板参数
3.使用场景
(1)遍历容器的时候
QMap<int, int> resultMap;
for(auto it = resultMap.begin(); it != resultMap.end(); it++) {
//do something
}
(2)不知道定义什么类型的时候
三、lambda
1.含义
简洁的函数,需要一个函数,但又不想命名的情况
2.优点
- 不需要额外在写一个函数或者函数对象,避免了代码膨胀和功能分散。
- 好的可读性和可维护性
3.用法
connect(ui->pushButton, &QPushButton::clicked, this, [=]() {
qDebug() << "do some things";
});
四、基于范围的for循环
1.作用
简化对数组元素的遍历
2.用法
int arr[] = {4, 5, 6, 7};
for(auto x : arr) {
qDebug() << x;
}
注意:本例的 x 变量相当于传值参数。在循环内部更改 x 不会更改数组。但如果用 & 将 x 定义成传引用,对 x 的修改就会反映到数组中
3.循环内更改数组
int arr[] = {4, 5, 6, 7};
for(auto &x : arr) {
x++;
}
值变为了5, 6, 7, 8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)