从4行代码看右值引用 概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的: 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表 ...
分类:
其他好文 时间:
2018-10-14 01:47:49
阅读次数:
156
https://blog.csdn.net/hyman_yx/article/details/52044632 左值、右值 在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯 ...
分类:
编程语言 时间:
2018-09-30 10:14:19
阅读次数:
182
转自 http://www.cnblogs.com/lanxuezaipiao/p/4132096.html 导读 最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题, ...
分类:
编程语言 时间:
2018-09-15 16:34:32
阅读次数:
176
c++ move关键字 move的由来:在 c++11 以前存在一个有趣的现象:T& 指向 lvalue (左传引用), const T& 既可以指向 lvalue 也可以指向 rvalue。但却没有一种引用类型,可以限制为只指向 rvalue。 就这么简单!你甚至可以暂时想像它的原型是这样的(当然 ...
分类:
编程语言 时间:
2018-09-04 23:25:37
阅读次数:
262
c++ forward关键字 forward的由来:模板函数中的推导类型,作为函数的参数时,即使用T&& arg来声明,推导出来具体的类型后,也不能把推导出来后的具体类型,转化成右值引用。forward就是为了解决这个问题的。 下面的例子就不能够调用 解决办法:加std::forward ...
分类:
编程语言 时间:
2018-09-04 23:24:39
阅读次数:
200
c/c++ 右值引用 转自:https://www.cnblogs.com/catch/p/3500678.html 左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们 ...
分类:
编程语言 时间:
2018-09-03 22:58:46
阅读次数:
242
在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型 ...
分类:
其他好文 时间:
2018-08-05 14:18:42
阅读次数:
308
移动构造 传统的深拷贝深赋值 对于类中,含有指针的情况,要自实现其拷贝构造和拷贝赋值。也就是所谓的深拷贝和深赋值。我想这己经成为一种共识了。比如如下类: 上面的过程,我们己经知晓,ret 作为右值引用,引用了临时对象,由于临时对象是待返回对象的复本,所以表面上看起来是,待返回对象的作用域扩展了,生命 ...
分类:
移动开发 时间:
2018-07-20 18:59:48
阅读次数:
346
右值引用 右值定义: 通俗来讲,赋值号左边的就是左值,赋值号右边的就是右值。可以取地址是左值,不可以取地址的是右值。C++11,之前没有明确提出右值的概念,所以 C++11 以前这些说活都是正确的。 C++11 中的左值,仍然等同于 C++98 左值。C++11 中的右值,除了 C++98 中的右值 ...
分类:
移动开发 时间:
2018-07-15 14:53:40
阅读次数:
214
引用折叠 引用折叠出现的情况在于范型编程时。 void f(T&& param); f(10); int x = 10; f(x); 这两者都可运行成功。 由于存在T&&这种未定的引用类型,当它作为参数时,有可能被一个左值引用或右值引用的参数初始化,这是经过类型推导的T&&类型,相比右值引用(&&) ...
分类:
编程语言 时间:
2018-07-03 23:42:39
阅读次数:
150