新特性系列介绍
nullptr
functor
auto用于定义变量类型及函数返回值时推断变量及返回值类型,默认为值类型如果是引用类型需要在后面加&显示指定为相应的引用类型
decltype用于根据表达式推断出其类型
lambda 闭包,[],[&],[=] 分别为不捕获,捕获引用,捕获值
所有的具名变量或对象都是左值,而匿名变量则是右值
T&& k = getVar();getVar()产生的临时值不会像第一行代码那样,在表达式结束之后就销毁了,而是会被“续命”,他的生命周期将会通过右值引用得以延续,和变量k的生命周期一样长
(另外即使使用了“=”,但是实际上使用对象p来创建一个新的对象p1。也就是产生了新的对象,所以调用的是拷贝构造函数
而首先声明一个对象p2,然后使用赋值运算符"=",将别的对象的值复制给p2,显然是调用赋值运算符,为一个已经存在的对象赋值)
右值引用实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
能够更简洁明确地定义泛型函数。
右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。
转移构造函数和转移赋值操作符 用于右值复制到新定义的对象及赋值到已定义左值的情况
std::move则把左值引用当做右值引用来使用,具体用法是 object c(std::move(obj)), 即会调用到转移构造函数
move说明
associationobject
网友评论