首先要分清: C++里的值只有两种值:左值、右值。—— 其本质应该是内存中存储的值/instance分两种:一种是持久的,一种是“短暂的” 也只有两种引用: 左值引用、右值引用。 ——引用,就是这个内存地址的助记符(别名)。 1. 左值引用 需绑定、也只能绑定 左值。 同理,右值引用 需绑定、也只能 ...
分类:
其他好文 时间:
2018-07-02 20:21:17
阅读次数:
187
https://github.com/changkun/modern-cpp-tutorial/blob/master/book/zh-cn/03-runtime.md 完美转发 前面我们提到了,一个声明的右值引用其实是一个左值。这就为我们进行参数转发(传递)造成了问题: void referenc ...
分类:
其他好文 时间:
2018-06-08 18:06:19
阅读次数:
182
我们也要时刻清醒,有时候右值会转为左值,左值会转为右值。 (也许“转换”二字用的不是很准确) 如果我们要避免这种转换呢? 我们需要一种方法能按照参数原来的类型转发到另一个函数中,这才完美,我们称之为完美转发。 std::forward就可以保存参数的左值或右值特性。 因为是这样描述的: When u ...
分类:
编程语言 时间:
2018-05-23 20:34:33
阅读次数:
181
c++11 标准库函数 std::move 和 完美转发 std::forward ...
分类:
编程语言 时间:
2017-11-05 16:32:00
阅读次数:
314
1. std::forward原型 2. 完美转发(Perfect Forwarding) (1)完美转发:是指在函数模板中,完全依照模板的参数类型(即保持参数的左值、右值特征),将参数传递给函数模板中调用的另外一个函数。 (2)原理分析 (3)std::forward和std::move的联系和区 ...
分类:
其他好文 时间:
2017-10-27 15:41:31
阅读次数:
129
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
背景: 最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文。 前言: 右值引用无疑是C++11新特性中一颗耀眼的明珠,在此基础上实现了移动语义和完美转发,三者构成了令很多C++开发者 ...
分类:
编程语言 时间:
2017-05-18 13:25:59
阅读次数:
296
完美转发 输出结果: Rvalue Name constructor.Rvalue Name constructor. Ivor Horton Lvalue Name constructor.Lvalue Name constructor. Fred Fernackerpan Lvalue Name ...
分类:
其他好文 时间:
2016-10-13 21:21:23
阅读次数:
122
本次要讲的是右值引用相关的几个函数:std::move, std::forward和成员的emplace_back,通过这些函数我们可以避免不必要的拷贝,提高程序性能。move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。如图所示是深拷贝和move的区别。 ...
分类:
编程语言 时间:
2016-04-11 13:51:09
阅读次数:
311