3

I can do what the following code shows:

std::string a = "chicken ";
std::string b = "nuggets";
std::string c = a + b;

However, this fails:

std::string c = "chicken " + "nuggets";

It gives me an error saying " '+' cannot add two pointers". Why is that so? Is there an alternative way to do this without getting an error?

Angew is no longer proud of SO
  • 167,307
  • 17
  • 350
  • 455
Vicente Bermúdez
  • 334
  • 1
  • 3
  • 8

3 Answers3

14

"chicken " and "nuggets" are literal C-string and not std::string.

You may concatenate directly with:

std::string c = "chicken " "nuggets";

Since C++14, you may add suffix s to have string

using namespace std::string_literals;
std::string c = "chicken "s + "nuggets"s;
Jarod42
  • 203,559
  • 14
  • 181
  • 302
6

"chicken " and "nuggets" are not of type std::string but are const char[]. As such even though you want to assign the concatenation to a string they types don't have an operator +. You could solve this using:

std::string c = std::string("chicken ") + "nuggets";
NathanOliver
  • 171,901
  • 28
  • 288
  • 402
4

Both "chicken" and "nuggets" has type const char* (as literals in code). So you are trying to add to pointers.

Try std::string c = std::string("chicken") + "nuggets";

std::string is not part of language itself, it's a part of standard library. C++ aims to have as few language features as possible. So built-in type for strings is not present in parser etc. That's why string literals will be treaded as pointers.

EDIT

To be completely correct: type of literals is really const char[N] (where N is character count in literal +1 for \0. But in C++ arrays ([]) can be treated as pointers, and that is what compiler tries to do (as it cannot add arrays)

Hcorg
  • 11,598
  • 3
  • 31
  • 36