c++表达式副作用问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:06:34
请问为什么(++k)*=5是正确的,而(k++)*=5是错误的,两者之间有什么区别,写一些分析的过程,谢谢

VC提示的错误:error C2106: '*=' : left operand must be l-value

错误代码:C2106:"*="的左边必须为左值

左值:涉及到在内存中的地址的表达式称为左值表达式。一个左值表达式代表一块存储区域的“定位”值,或者叫做一个“左”值,意味着它可以出现在等号(=)的左边,左值一般是一些标志符。

k++不是左值

C++规定,++k是l-value(左值)而k++是r-value(右值)。

不过,在C中,二者皆为右值。

你可以用cpp作为源文件后缀和用c作后缀进行对比试验。

(k++)*=5
编译器不能确定K的值,所以判定为错误,也就是说K存在二义性