【问题标题】:c++ compound assignment when multiplying乘法时的c ++复合赋值
【发布时间】:2012-01-21 11:44:39
【问题描述】:

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

a = (a * 10) + b;

最初我尝试了以下方法:

a *= 10 + b;

但这相当于:

a = a * (10 + b)

只是好奇。今天遇到了这个。这不是家庭作业。

【问题讨论】:

  • 没有。在赋值发生之前,右侧被简化为表达式。
  • 'a' 和 'b' 是你自己的类型还是原始的 c++ 类型?
  • @arasmussen ab 在我的情况下是整数

标签: c++


【解决方案1】:

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

(a *= 10) += b;

但这并不是什么好代码,而且我认为它可能会在 C++11 之前调用未定义的行为,因为在没有干预序列点的情况下修改了两次 a(一次在 *= 中,一次在 += 中)。

【讨论】:

  • @EdHeal 我不是。这纯粹是因为我对你是否能做到感兴趣。
  • 我怀疑'a' is evaluated only once
  • 一开始我的想法是:在 C++11 之前的编译器中,UB 真的有很好的机会吗?我花了一段时间才找到stackoverflow.com/a/10654019/2932052
【解决方案2】:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2020-01-31
    • 2012-01-22
    • 2020-04-17
    相关资源
    最近更新 更多