在C++中,预增量(或预减量)可以用作 l值 ,但后增量(或后减量)不能用作l值。
null
例如,以下程序打印 a=20 (++a用作l值)
// CPP program to illustrate // Pre-increment (or pre-decrement) #include <cstdio> int main() { int a = 10; ++a = 20; // works printf ( "a = %d" , a); getchar (); return 0; } |
a = 20
上面的程序运行正常,而下面的程序编译失败并出现错误 “赋值中的非左值” (a++用作l值)
// CPP program to illustrate // Post-increment (or post-decrement) #include <cstdio> int main() { int a = 10; a++ = 20; // error printf ( "a = %d" , a); getchar (); return 0; } |
prog.cpp: In function 'int main()': prog.cpp:6:5: error: lvalue required as left operand of assignment a++ = 20; // error ^
作为左值,++a与a++有何不同?
因为 ++a
返回一个 左值 ,这基本上是对我们可以进一步赋值的变量的引用,就像普通变量一样。也可以将其分配给参考,如下所示:
int &ref = ++a; // valid int &ref = a++; // invalid
如果你还记得 a++
如果有效,它不会立即增加其持有的价值。为简洁起见,可以将其视为在下一个语句中递增。所以基本上发生的是 a++
返回一个 右值 ,它基本上只是一个值,类似于未存储的表达式的值。你可以想到 a++ = 20;
经处理如下:
int a = 10; // On compilation, a++ is replaced by the value of a which is an rvalue: 10 = 20; // Invalid // Value of a is incremented a = a + 1;
这应该有助于理解原因 a++ = 20;
不行。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END