原因是:i++不是存储在x中的值,他们的具体函数实现请看下面: // 前缀形式: int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用 {//函数本身无参,意味着是在自身空间内增加1的 *this += 1; // 增加 return *this; // 取回值 } //后缀形式: const int ...
左值不但具有空间实体,还具有读写访问权。 现在我们来看a++的实现: int temp; temp=a; a=a+1; return temp; 因为a++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用 ,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值)。 而++a的实现为: a=a+1...
int i = 0; int &j = i; // 合法,左值引用指向一个左值 ++i += i; // 合法,++i...
i++先取值作为整个表达式的值,再对i进行i=i+1运算。如果整个表达式的值作为左值再被赋值,那么赋给谁?赋给i,那么i=i+1还有什么意义。因此,整个表达式的值只能作为右值。即i++只能作为右值。关于左值右值参见《C++程序设计精要教程》,配套《C++程序设计精要教程学习指导与习题解答》,难题可扫二维码进入视频讲解。
原因是:i++不是存储在x中的值,他们的具体函数实现请看下面: // 前缀形式: int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用 {//函数本身无参,意味着是在自身空间内增加1的 *this += 1; // 增加 ...
这个“返回值”才会被编译器预留。而预留的一般不是左值,而是右值(这里请不要把这条作为编程标准依据...
意思就是所a++不能作为左值,那a++为什么不能作为左值呢?我们先来看左值的定义: 左值(lvalue) 是B语言/C语言/C++语言等类C语言中的一类表达式。“左”(left)的原意是指可以放在赋值符号“=”的左边,但其实也表示能作为&和++等操作符的操作数(B语言中已经如此)。左值不但具有空间实体,还具有读写访问权。