引用 &(左值引用--Lvalue reference)
引用即别名(并非对象),引用是一个对象的另外一个名字,且只能是一个对象,所以引用必须被初始化,一但初始化后便不能再改变引用的值,因为引用是很专一的。
一般在初始化变量时,初始值会被拷贝到新建的对象中,然而引用只是把它和它的初始值绑定在一起,并不是将初始值拷贝给引用。所以在调用引用的时候能加快程序的运行速度...
分类:
其他好文 时间:
2015-08-13 14:30:00
阅读次数:
99
C++11中的右值引用May 18, 2015移动构造函数C++98中的左值和右值C++11右值引用和移动语义强制移动语义std::move()右值引用和右值的关系完美转发引用折叠推导规则特殊模板参数推导规则解决完美转发问题引用在C++98中有左值和右值的概念,不过这两个概念对于很多程序员并不关心,...
分类:
编程语言 时间:
2015-08-12 21:23:23
阅读次数:
177
原文出处:http://kuring.me/post/cpp11_right_referenceMay 18, 2015移动构造函数C++98中的左值和右值C++11右值引用和移动语义强制移动语义std::move()右值引用和右值的关系完美转发引用折叠推导规则特殊模板参数推导规则解决完美转发问题引...
分类:
编程语言 时间:
2015-08-12 11:26:46
阅读次数:
165
首先不要被人蒙了,如果是这样,根本编译不过:int i=1;int b=i+++++i;printf("%d %d\n", b ,i);Mingw报错:error: lvalue required as increment operand (好像是说,++缺左值,这里的++是上题的第三第四个加号)V...
分类:
其他好文 时间:
2015-08-04 20:35:04
阅读次数:
121
什么是lvalue, 什么是rvalue?lvalue:具有存储性质的对象,即lvalue对象,是指要实际占用内存空间、有内存地址的那些实体对象,例如:变量(variables)、函数、函数指针等。rvalue:相比较于lvalue就是所谓的没有存储性质的对象, 也就是临时对象。也可以这样理解:lv...
分类:
编程语言 时间:
2015-08-04 13:01:23
阅读次数:
156
1、左值引用
左值引用只能绑定左值,不能绑定右值.
如下:
int x = 1;
int &y = x; //绑定左值,正确
int &z = 2; //绑定右值2,编译错误但是可以将右值绑定到一个const左值引用(这是一个例外)
如:
//右值绑定到const左值引用
int const &i = 28; ...
分类:
编程语言 时间:
2015-08-04 02:06:50
阅读次数:
164
以前有一个误解,认为匿名对象是一个右值。直到意识到,匿名对象可以传给引用类型的形参后,才发觉这一个认识不对。因为只有左值才能传递给引用类型的形参。测试中也发现,可以将匿名对象放置到等号的左边对其进行赋值,这更加坚定了我的认知。 如下代码,这样的写法是正确的:class Test{public:...
分类:
编程语言 时间:
2015-07-24 10:33:23
阅读次数:
185
移动语义--std::move编译器只对右值引用才能调用转移构造函数和转移赋值函数,而所有命名对象都只能是左值引用,如果已知一个命名对象不再被使用而想对它调用转移构造函数和转移赋值函数,也就是把一个左值引用当做右值引用来使用,怎么做呢?标准库提供了函数 std::move,这个函数以非常简单的方式将...
分类:
移动开发 时间:
2015-07-22 22:12:46
阅读次数:
203
int i = 0;int *ip = &(i++); //错误int *ip = &(++i); //正确看到上面的语句,当时以为两个都是是对的啊,可是当我用VS2010的编译器试了试之后,才发现第一个取地址确实是错误的语句,具体的提示是:error C2102: “&”要求左值,而第二个取地址是...
分类:
其他好文 时间:
2015-07-21 23:38:46
阅读次数:
231
题目链接:http://codeforces.com/problemset/problem/558/B题目意思:给出一个序列,然后找出出现次数最多,但区间占用长度最短的区间左右值。 由于是边读入边比较,因此问题最关键的是,记录每个数第一次出现的位置,即左值。因为要保证次数是出现最多,因此需要一个c....
分类:
其他好文 时间:
2015-07-16 23:51:24
阅读次数:
152