在vs2012(c++)make_pair()改动: C++: template <class T1, class T2> pair<V1, V2> make_pair(T1&& x, T2&& y);如果没有指定类型,它会自动推导. C++: template <class T1, class T2> pair<T1, T2> make_pair(T1 x, T2 y); 如果make_pair用在了insert中,建议直接…
参考文章: [1] 基础篇:lvalue,rvalue和move [2] 深入浅出 C++ 右值引用 [3] Modern CPP Tutorial [4] 右值引用与转移语义 刷 Leetcode 时,时不时遇到如下 2 种遍历 STL 容器的写法: int main() { vector<int> v = {1, 2, 3, 4}; for (auto &x: v) cout<<x<<' '; cout<<endl; for (auto &…
为什么要用移动语义 先看看下面的代码 // rvalue_reference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> class HugeMem { public: HugeMem(int size) : sz(size) { pIntData = new int[sz]; } HugeMem(const HugeMem & h) : sz(h.sz) { pIntData =…
写在前面 C++中有“左值”.“右值”的概念,C++11以后,又有了“左值”.“纯右值”.“将亡值”的概念.关于这些概念,许多资料上都有介绍,本文在拾人牙慧的基础上又加入了一些自己的一些理解,同时提出了一些需要读者特别注意的地方,主要目的有二:      1.尽可能地将这些概念介绍清楚.      2.为后续介绍完美转发和移动语义做好铺垫. 正文 一.表达式 要说清“三值”,首先要说清表达式. 定义            由运算符(operator)和运算对象(operand)①构成的计算式(类…
C++11的版本在类型系统上下了很大的功夫,添加了诸如auto,decltype,move等新的关键词来简化代码的编写与降低阅读代码的难度.为了更好的理解这些新的语义,笔者确定通过几篇文章来简单窥探一下C++类型系统的冰山一角,如果加深了对C++类型系统的理解,想必大家也能够更好的应用由C++11带给我们的新"利器". 1.左值与右值 左值(lvalue)和右值(rvalue)是C++类型系统之中的基础概念,我们不需要了解这些基础概念,同样也能写出代码.但是如果没有弄清左右值的概念,对…
1.左值与右值 最感性的认识. 当然,左值也是可以在右边的. 左值是可以被修改的,右值不能. 当然取地址也是. 生存周期一般左值会比右值的长,一般右值都计算时产生的无名临时对象,存在时间比较短. 下面还有一种情况也要区分. 2.左值引用和右值引用 左值引用:可以引用一个对象,有时候也可以绑定一个右值. 右值引用:只能引用右值. 1左值引用示例 看以下代码,比较正常. int a = 3; int &p1 = a; // 左值引用 若左值引用右值将报错 但加上const就可以引用了 2右值引用示例…
这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理解C++ 11中这些比较重要的特性. 关于左值和右值的定义 左值和右值在C中就存在,不过存在感不高,在C++尤其是C++11中这两个概念比较重要,左值就是有名字的变量(对象),可以被赋值,可以在多条语句中使用,而右值呢,就是临时变量(对象),没有名字,只能在一条语句中出现,不能被赋值. 在 C++1…
目录 1.左值and右值 2.引用 3.左值引用的用途 4.std::move和std::swap C和C++中定义了引用类型(reference type),存在左值引用(lvalue reference).而在C++11中,新增了右值引用(rvalue reference)这一概念, 虽然个人感觉右值引用用处不大,但在此一并讨论. 1.左值and右值 首先,我们讨论左值和右值两个概念. 左值(lvalue):一个标识非临时性对象的表达式.通常来说,可以将程序中所有带名字的变量看做左值. 右值…
最近在研究C++ 左值 右值,搬运.收集了一些别人的资料,供自己记录和学习,若以后看到了更好的解释,会继续补充.(打“?”是我自己不明白的地方 )   参考:<Boost程序库探秘——深度解析C++准标准库(第2版)> 9787302342731   左值:一个可以用来存储数据的变量,有实际的内存地址(变量名): 右值(非左值):“匿名”的“临时”变量,在表达式结束时生命周期终止,不能存放数据,可被修改,也可不被修改(const修饰).   鉴别左值右值: 左值可用取地址操作符&获取地…
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/46779063 新类型: int和int&是什么?都是类型.int是整数类型,int&则是整数引用类型.相同int&&也是一个类型.两个引號&&是C++ 11提出的一个新的引用类型.次吧.假设你记住这个新类型,那么非常多疑问都能迎刃而解.而且对<Effective Modern C++>说到的void f(Widget&&…