C++中的预增量(或预减量)

在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
喜欢就支持一下吧
点赞10 分享