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存在二义性