05/06/2020
C++序章
移动语义
C++11最广泛接受的特性可能是移动语义。如何区分左右值尤为重要。
- 返回值的临时对象是右值
- 任何形参都是左值
- 左值转换右值使用std::move
构造函数下的移动语义
- 拷贝构造函数
- 移动构造函数
void test(ClassType c);//普通函数
ClassType Name; //类
test(Name); //c是Name经由拷贝构造函数创建的副本
test(std::move(Name)); //移动构造函数
- 实参可以是左值也可能是右值
lambda表达式
经由lambda表达式创建的函数对象称为闭包。
声明与定义
声明的作用引入名字和型别,而不给出细节,如存储位置或具体实现
extern int x;
class Widget;
bool test(int a);
enum class Color; //限定作用域的枚举声明
定义同时也可以当声明用,所以,除非某些场合非给出定义不可,我倾向于只使用声明。
Effective Modern C++ 主要体现在型别推导上面,如何在模板中高效使用auto和decltype,同时对C++11新特性进行分析,如智能指针,移动语义和lambda表达式等等。