15

我见过人们同时使用“<<”和“+”来输出不同的字符串。

cout << firstname << lastname << endl;

相对:

cout << firstname + lastname << endl;

使用“<<”更好还是没有太大区别?

4

3 回答 3

20

<<我会说在这种特殊情况下使用它更好。否则,连接会导致一个临时的,它可能会无缘无故地分配内存。

于 2013-01-17T22:59:15.310 回答
18

当然,使用<<- 连接字符串将创建粘贴在一起的两个字符串的副本。它是否还在顶部分配额外的内存取决于字符串在 C++ 库中是如何实现的,但如果名字和姓氏“足够长”(大于 8-16 个字符),那么它很可能会分配内存(然后在不再需要临时副本时再次释放它)。

相比之下,运营商的<<开销很小,所以毫无疑问它更好。

当然,除非你做了成千上万这样的事情,否则你不太可能有可测量的差异。但是最好不要浪费 CPU 周期,你永远不知道它们在其他地方有什么用处……;)

于 2013-01-17T23:10:03.193 回答
1

级联<<是更好的选择。

为了性能,正如其他主题所提到的,操作员<<不一定会引入任何临时对象。级联<<可以视为管道。

有时,+如果您的左操作数不是用户定义的类型,则不能使用,除非您提供相应的operator+. 例如,

cout << "Hello, " << lastname << endl;// Works
cout << "Hello, " + lastname << endl; // This won't work
于 2013-01-17T23:20:47.640 回答