15

I have seen people output different strings together by using both "<<" and "+".

cout << firstname << lastname << endl;

versus:

cout << firstname + lastname << endl;

Is it better to use "<<" or does it not make much of a difference?

iDrinkJELLY
  • 153
  • 1
  • 6
  • 3
    You could also do a test which is faster and post the results. – Csq Jan 17 '13 at 23:11
  • I'm assuming you're referring `std::string` for `operator+` concatenation? This won't work with raw `const char *`s. – David G Jan 17 '13 at 23:25

3 Answers3

20

I would say its better to use << in that particular case. Otherwise, concatenation results in a temporary which could allocate memory for no good reason.

K-ballo
  • 80,396
  • 20
  • 159
  • 169
18

Definitely, use << - concatenating the string will create a copy of the two strings pasted together. Whether it also allocates extra memory on top is a matter of how strings are implemented in the C++ library, but if the first and last names are "long enough" (bigger than 8-16 characters together), then it most likely WILL allocate memory (and then free it again when the temporary copy is no longer needed).

The << operator will have very little overhead in comparison, so no doubt it is better.

Of course, unless you do thousands of these things, it's unlikely that you will have a measurable difference. But it's good to not waste CPU cycles, you never know what good use they can be somewhere else... ;)

Mats Petersson
  • 126,704
  • 14
  • 140
  • 227
1

Cascading << is a better choice.

For performance, as the other theads mentioned, operator << doesn't necessarily introduce any temporary object. A cascading << can be considered as a pipe.

Also sometimes, you cannot use + if your left-hand operand is not a user-defined type, unless you provide the corresponding operator+. E.g.,

cout << "Hello, " << lastname << endl;// Works
cout << "Hello, " + lastname << endl; // This won't work
Eric Z
  • 14,327
  • 7
  • 45
  • 69
  • 2
    For the last line to not work, it would require a really poor implementation of a string type. It will certainly work with `std::string`. – K-ballo Jan 17 '13 at 23:29
  • Yes, std::string does have that support. – Eric Z Jan 17 '13 at 23:38
  • @K-ballo: Exactly as written, the last line is a const char[], and thus it doesn't support the + operator cout << std::string("Hello, ") + lastname << endl; would work – deworde Jan 18 '13 at 09:16