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…
左值与右值 什么是左值?什么是右值? 在C++里没有明确定义.看了几个版本,有名字的是左值,没名字的是右值.能被&取地址的是左值,不能被&取地址的是右值.而且左值与右值可以发生转换. 我个人的理解就是在当前作用域下右值是个临时变量. 举例如下:https://blog.csdn.net/wangshubo1989/article/details/50479162 // lvalues: // ; i = ; // ok, i is an lvalue int* p = &i; //…
左值(LValue)和右值(RValue)的一个快捷记法是赋值运算,左值是赋值运算左边的值,右值就是右边(=,=废话).例如: int a = 5; a就是左值,5就是右值. 当然,如果真是这么个含义,那么这概念就相当蛋疼了.其实不是这样的~~ 左值其实是对一块内存区域的引用(这个还不是C++中的int &a之类的引用),比如上边的a,就对应了一块内存区域(起始地址为&a,大小为sizeof(int)). 更专业的定义在这里: An object is a region of storag…
左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们是理解 move/forward 等新语义的基础. 左值右值的定义 左值与右值这两概念是从 c 中传承而来的,在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式). int a; int b; a = ; b = ; a = b; b = a…