繁体   English   中英

赋值运算符(+= 和 =)之间的区别

[英]Difference between assignments operator (+= and =)

我已经编程 c++ 有一段时间了。 不过,我的问题可能仍然很幼稚。 :)

+= 和 + 有什么区别。 例如

std::string a = "Hi";
a += "b" + "c";

或者

std::string a = "Hi";
a = a + "b" + "c";

如果有任何区别,哪个更优化使用? 哪个操作数较少?

在这个具体的例子中,有一个很大的区别: a += "b" + "c"; 不编译,而a = a + "b" + "c"; 做。 前者试图添加两个指针,这在语法上是无效的。 后者添加了一个std::string和一个char*指针,并且恰好有一个合适的operator+重载。

幸运的是,编译器 100% 优化了这一点(除非在运算符重载的情况下,然后它会变得毛茸茸的)所以你不必担心。 无论如何,这是它的工作原理:

int x = 1;
x = x + 2 + 3; // creates an int buffer that adds 1 and 2, then it is moved to x
x += 2 + 3; // uses x as the int buffer, no need for copying/moving - just immediate addition

运算符重载++=然后取决于您对这些重载的实现。 通常编译器仍然能够优化它,但它可能不是。 对于标准中的任何内容,无论哪种方式几乎总是相同的,因为每个 function 都有注释,以便编译器在看到这些重复指令时对其进行优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM