左值(LValue)和右值(RValue)的一个快捷记法是赋值运算,左值是赋值运算左边的值,右值就是右边(=,=废话).例如: int a = 5; a就是左值,5就是右值. 当然,如果真是这么个含义,那么这概念就相当蛋疼了.其实不是这样的~~ 左值其实是对一块内存区域的引用(这个还不是C++中的int &a之类的引用),比如上边的a,就对应了一块内存区域(起始地址为&a,大小为sizeof(int)). 更专业的定义在这里: An object is a region of storag
左值引用VS右值引用 左值引用对于一般的C++程序员再熟悉不过,但对于右值引用(C++0X新特性),就稍微有点不知所云 左值VS右值 在定义变量的时候,经常会用到左值和右值,比如:int a = 1;int b = a + 1; 上面这段代码,a先作为左值,在作为右值.在作为右值的时候,是相当于(原理上等同,但不一定对) int tmp(a + 1);int b(tmp); 中间会先建立一个临时遍历,然后在把临时遍历赋值给b.对于数,只能作为左值,而变量名,即可以作为左值又可以作为右值.(作为左
——原创,引用请附带博客地址 2019-12-06 23:42:18 这篇文章分析的还是不行,先暂时放在这以后再更新. 本篇比较长,需要耐心阅读 以一个实际问题开始分析 class Sub{} Sub GetInstance(){ return Sub(); } int main(){ Sub a=GetInstance(); .... //////////////////////////////////////////////////////////////////// [分析]:例子比较简易
lvalue(左值)和rvalue(右值) 昨天写代码遇见一个这样的错误:{ "cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'",代码类似下边 class MyClass { int data; public: MyClass(int& e):data(e){}; }; int main(){ MyClass c(10); return 0; } 编译器告诉
1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也同理,但是写成++a是没有问题的.上面的理解是很粗浅的,深入理解需要涉及左值右值的概念. template<typename T> T min(T &x, T &y) { return (x < y) ? x : y; } int main() { using namespa