theme: channing-cyan highlight: a11y-dark
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
在 C++ 中,预增(或预减)可用作左值,但后增(或后减)不能用作左值。
例如,以下程序打印a = 20(++a 用作 l 值)
// CPP 程序来说明 Pre-increment(或 pre-decrement)
#include <cstdio>
int main()
{
int a = 10;
++a = 20;
printf("a = %d", a);
getchar();
return 0;
}
a = 20
上面的程序可以工作,而下面的程序编译失败,错误 “赋值中的非左值” (a++用作左值)
// CPP 程序来说明后递增(或后递减)
#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
返回一个lvalue,它基本上是对我们可以进一步分配的变量的引用——就像一个普通的变量。它也可以分配给一个引用,如下所示:
int &ref = ++a; // 有效的
int &ref = a++; // 无效的
然而,如果你回想一下a++
它是如何工作的,它不会立即增加它所持有的值。为简洁起见,您可以将其视为在下一条语句中递增。所以基本上发生的是a++
返回一个rvalue,它基本上只是一个类似于未存储的表达式的值的值。a++ = 20;
处理后可以想到如下:
int a = 10;
在编译时,a++ 被 a 的值替换,a 是一个右值:
10 = 20; // 无效
a 的值递增
a = a + 1;
这应该有助于理解为什么a++ = 20;
不起作用。
如果你发现任何不正确的内容,或者想分享一些有关本文的更多内容,请在评论区告诉我。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有