result of += in C and C++

C/C++ 专栏收录该内容
3 篇文章 0 订阅


QUESTION:


#include <stdio.h>
int main()
{
   int i = 0;
   (i+=10)+=10; 
   printf("i = %d\n", i);
   return 0; 
}

In.c :error: lvalue required as left operand of assignment
In .cpp :i = 20

ANSWER 1:
Semantics of the add-assign operators is different in C and C++:
C99 standard, 6.5.16, part 3:
An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment, but is not an lvalue.
In C++ 5.17.1:
The assignment operator (=) and the compound assignment operators all group right-to-left. All require a modifiable lvalue as their left operand and return an lvalue with the type and value of the left operand after the assignment has taken place.
C returns the result value, but C++ returns the variable .


ANSWER 2:
  (i+=10)+=10 is undefined behaviour in both C and C++03 because it modifies i twice between sequence points.



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值