《深入理解C++11 新特性解析与应用》 读书笔记

第六章 在 C++ 11中,nullptr 是一个所谓的 “指针空值类型” 的常量,指针空值类型被命名为nullptr_t。 nullptr 是有类型的,且可以被隐式地转化为指针类型。
第二章

  1. 异常机制会带来一些额外开销,比如函数抛出异常,会导致函数栈被依次地展开,并依帧调用在本帧中已构造的自动变量的析构函数等。在C++11 中,如果noexcept 修饰的函数抛出了异常,编译器可以选择直接调用std::terminate() 终止程序运行。

第三章
左值、右值和右值引用

a = b + c
可以取地址的、有名字的就是左值,反之不能取地址的、没有名字的就是右值。
&a 允许,则是左值;&(b+c) 不能通过编译,因而(b+c) 是右值。

右值由两个概念组成,一个是将亡值(xvalue, Expiring Value), 另一个则是纯右值(prvalue, Pure Rvalue)
其中 纯右值就是C++98 标准中右值得概念,讲的是用于辨识临时变量和一些不跟对象关联的值。比如非引用返回的函数返回的临时变量值,一些运算表达式,比如1+3 产生的临时变量值,也是纯右值。

将亡值则是C++11 新增的跟右值引用相关的表达式,这样表达式通常是将要被移动的对象(移为他用),比如返回右值引用 T&& 的函数返回值、std::move的返回值,或者转换为T&& 的类型转换函数的返回值。而剩余的,可以标识函数、对象的值都属于左值。在C++11 的程序中,所有的值必属于左值、将亡值、纯右值三者之一。

右值引用就是一个右值进行引用的类型。
T&& a = ReturnRvalue();
T b = ReturnRvalue();
少一次对象的析构和一次对象的构造。

std::move 的作用是强制一个左值称为右值。
从实现上讲,std::move 基本等同于一个类型转换
static_cast

猜你喜欢

转载自blog.csdn.net/lilele12211104/article/details/78953682
今日推荐