1.介绍 Rvalue引用至少结决了两个问题 1.实现移动语义 2.完美转发 rvalue lvalue没有明确的定义,大致定义如下: lvalue:可以取地址 rvalue:不可取地址 ...
分类:
编程语言 时间:
2017-10-09 14:16:59
阅读次数:
271
右值引用是C++11 引入的新特性。它解决了两类问题:实现移动语义和完美转发。本文大绝大部分内容,来自于文章:http://kuring.me/post/cpp11_right_reference/ 一:左值(lvalue)和右值(rvalue) 最初,在C中,左值和右值的定义如下:左值,是一个可以 ...
分类:
编程语言 时间:
2017-08-07 22:03:13
阅读次数:
203
当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝、赋值和销毁时做什么。一个类通过定义三种特殊的成员函数来控制这些操作,分别是拷贝构造函数、赋值运算符和析构函数。 拷贝构造函数定义了当用同类型的另一个对象初始化新对象时做什么,赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么,析构函数 ...
分类:
其他好文 时间:
2017-07-05 15:26:04
阅读次数:
195
移动语义是C++11的新特性之一,利用移动语义可以实现对象的移动而非拷贝。在某些情况下,可以大幅度的提升性能。本文将介绍C++11移动语义中的一些基本概念。 ...
分类:
移动开发 时间:
2017-06-22 21:47:32
阅读次数:
244
背景: 最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文。 前言: 右值引用无疑是C++11新特性中一颗耀眼的明珠,在此基础上实现了移动语义和完美转发,三者构成了令很多C++开发者 ...
分类:
编程语言 时间:
2017-05-18 13:25:59
阅读次数:
296
目录 C++11增加了一个新的类型,称作右值引用(R-value reference),标记为T&&,右值引用结合std::move可以很好的优化程序的效率。 1.左值、右值、左值引用、右值引用 左值是有名字的,对应了一定的内存区域,可访问;右值不具名,不对应内存域,不可访问,临时对像是右值。区分表 ...
分类:
移动开发 时间:
2017-05-10 22:24:38
阅读次数:
420
移动语义 完成所有权的移交,当拷贝构造和赋值构造时,目标对象的所有权必须移交给我们的新的对象,原始对象将丧失所有权,_p指针将不再指向原来的那个数组; 左值与右值 C原始定义 左值:可以出现在赋值号的左边或者右边 右值:只能出现在赋值号的右边 C++的定义 左值:用于标识非临时对象或者非成员函数的表 ...
分类:
编程语言 时间:
2016-12-25 23:02:46
阅读次数:
273
C++11中增加了一个新的类型,即右值引用(R-value reference),标记为T&& 。而它的目的就是去消除不必要的深拷贝,提高性能。 概念性的东西就不多说了。直接用代码体现其优势。 实现一个MyString类: move语义是用来将左值转换为右值,这样的目的只是改变了对象的控制权而并没有 ...
分类:
编程语言 时间:
2016-11-24 08:14:09
阅读次数:
181
C++智能指针 unique_ptr unique_ptr 独占所指向的对象, 同一时刻只能有一个 unique_ptr 指向给定对象(通过禁止拷贝语义, 只有移动语义来实现), 定义于 memory (非memory.h)中, 命名空间为 std. 标准库早期版本中定义了 auto_ptr, 它具 ...
分类:
编程语言 时间:
2016-10-04 14:12:36
阅读次数:
682
对于c++11来说移动语义是一个重要的概念,一直以来我对这个概念都似懂非懂。最近翻翻资料感觉突然开窍,因此记下。其实搞懂之后就会发现这个概念很简单,并无什么高深的地方。 先说说右值引用。右值一般指的是表示式中的临时变量,在c++中临时变量在表达式结束后就被销毁了,之后程序就无法再引用这个变量了。但是 ...
分类:
移动开发 时间:
2016-08-26 06:34:09
阅读次数:
181