gpt4 book ai didi

c++ - x += a 比 x = x + a 快吗?

转载 作者:IT老高 更新时间:2023-10-28 12:00:24 24 4
gpt4 key购买 nike

我正在阅读 Stroustrup 的“C++ 编程语言”,他说向变量添加内容的两种方法中

x = x + a;

x += a;

他更喜欢 +=,因为它很可能实现得更好。我认为他的意思是它也工作得更快。
但真的吗?如果它取决于编译器和其他东西,我该如何检查?

最佳答案

任何称职的编译器都会为任何内置类型(intfloat 等)的两种构造生成完全相同的机器语言序列,只要该语句实际上就像 x = x + a; 并且启用了优化一样简单。 (值得注意的是,GCC 的 -O0 是默认模式,它执行反优化,例如将完全不必要的存储插入到内存中,以确保调试器总能找到变量值。)

但是,如果语句更复杂,它们可能会有所不同。假设 f 是一个返回指针的函数,那么

*f() += a;

只调用一次f,而

*f() = *f() + a;

调用它两次。如果 f 有副作用,则两者之一将是错误的(可能是后者)。即使 f 没有副作用,编译器也可能无法消除第二次调用,所以第二次调用确实可能更慢。

由于我们在这里讨论的是 C++,对于重载 operator+operator+= 的类类型,情况就完全不同了。如果 x 是这样的类型,那么 -- 在优化之前 -- x += a 转换为

x.operator+=(a);

x = x + a 转换为

auto TEMP(x.operator+(a));
x.operator=(TEMP);

现在,如果类编写正确并且编译器的优化器足够好,两者最终都会生成相同的机器语言,但对于内置类型并不确定.这可能是 Stroustrup 在鼓励使用 += 时所想的。

关于c++ - x += a 比 x = x + a 快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12479486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com