C/C++ C++11新特性

C++11中的11表示2011年的C++标准。

 

1、右值引用(rvalue reference)和移动(move)语义

1)作用:避免右值拷贝,而只是“移动”,减少拷贝开销。

2)右值:没有名字,不能取地址,不能修改。左值和右值没有严格的定义。

3)移动语义:

 

2、constexpr(常量表达式)

编译期 

 

3、类型推断,通过auto和decltype两个关键字来实现。

1)auto

1.1)根据变量赋的值,推断变量的数据类型。

auto i = 1; // i被自动推断为int类型 

1.2)可以极大地简化长语句。

vector<int> vec(6,10);
// (1)
vector<int>::iterator iter = vec.iterator();
// (2) 简化写法
auto iterAuto = vec.iterator();

1.3)auto不能修饰函数形参。

2)decltype

 

4、Lambda表达式(匿名函数) 

// Lambda表达式的格式
[capture](params)->ret { body};

1)capture:捕获的参数列表。

[a, &b] // 表达式捕获a的值,以及b的引用。
[this] // 捕获this指针。
[&] // 捕获所有外部自动变量的引用。
[=] // 捕获所有外部自动变量的引用。
[] // 不捕获外部的任何变量。
auto func = [](int i){return i+4;};
func(10);           // 14

 

5、nullptr(空指针),只表示指针(不是0),并且可以隐式转换成其他任何类型的指针。

NULL是一个宏,值由编译器的具体实现决定。通常,C中是0或者(void*)0,C++中是0(因为void*不可以隐式转化成其他类型的指针)。

// 函数重载
void foo(int) {}     // #1
void foo(char*) {}   // #2
int main() {
    foo(NULL); // C++中调用#1
}
void foo(int) {}     // #1
void foo(char*) {}   // #2
int main() {
    foo(nullptr); // 调用#2
}

  

6、基于范围(range based)的for循环

int arr[5] = {1, 2, 3, 4, 5};
// 简化for循环的写法。引用是为了修改原值,可以不是引用。
for(int &x : arr) 
{
    x *= 2; 
}

 

7、初始化列表

// 基本类型
int x = {5}; // 可以不是数组
double y {2.75}; // 可以不加等号
short quar[4] {4, 5, 2, 1};
int *arr = new int[4]{2, 4, 6, 7}; // 可以new
// 自定义类型
class Stump
{
private:
    int roots;
    double weight;
public:
    Stump(int r, double w) : roots(r), weight(w) {}
};

Stump s1(3, 15.6); // 圆括号
Stump s2{3, 15.6}; // C++11
Stump s3 = {3, 15.6}; // C++11

 

8、元组

9、后置返回类型(tailing return type) 

10、override和final 

 

11、智能指针(smart pointer)

https://www.cnblogs.com/yangwenhuan/p/10635102.html

 

12、新增数据类型

1)long long和unsigned long long:支持64位整型。

2)char32_t和char16_t:

3)原始字符串:

 

13、类内成员初始化

 

14、default和delete

 

15、委托构造函数

 

16、继承构造函数

 

17、模板function 

 

18、作用域内枚举

 

19、模板别名

 

20、可变参数模板

 

21、POD、alignof()、alignas

 

22、正则表达式

 

 

std::move:让对象可以移动

std::forward 

std::array

 

如果类有将模板std::initializer_list作为参数的构造函数,则只有该构造函数可以使用列表初始化形式。

 

参考链接:

https://en.wikipedia.org/wiki/C++11

https://www.cnblogs.com/nothx/p/8523191.html

https://blog.csdn.net/jiange_zh/article/details/79356417

 

原文链接: https://www.cnblogs.com/yangwenhuan/p/12218143.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C/C++ C++11新特性

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/328485

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:43
下一篇 2023年3月1日 下午4:43

相关推荐