乘以时的c ++复合赋值

时间:2011-12-15 19:59:57

标签: c++

有没有办法使用复合赋值运算符来实现这样的结果:

a = (a * 10) + b;

最初我尝试了以下内容:

a *= 10 + b;

但这相当于:

a = a * (10 + b)

好奇。今天跑过这个。这不是作业。

2 个答案:

答案 0 :(得分:6)

如果您确实需要确保只评估a一次,则可以使用*=返回左值的事实:

(a *= 10) += b;

但它不是很好的代码,我认为它可能在C ++ 11之前调用未定义的行为,因为修改a两次(一次在* =和一次在+ =)而没有插入序列点。 / p>

答案 1 :(得分:0)

https://ideone.com/WWudo

#include <iostream>

using namespace std;

int main() 
{
        int a = 5;
        int b = 10;
        (a *= b) += 10;
        cout << a;
        return 0;
}

输出60。