新特性系列介绍
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
c++11新特性
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在C++11中,我们还是会看到一些新元素。这些新鲜出炉的元素可能会带来一些习惯上的改变,不过权衡之下,可能这样的改...
- C++11 标准新特性: 右值引用与转移语义 VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新...