C++ Literal String Concatenation

Eri*_*ner 8 c++ string concatenation

我有一个关于C++中字符串连接的问题.

string str = "ab" + 'c';
cout << str << endl;

char ch = 'c';
string str1 = "ab";
string str2 = str1 + ch;
cout << str2 << endl;
Run Code Online (Sandbox Code Playgroud)

代码产生:

ed before SaveGraphicsState
abc
Run Code Online (Sandbox Code Playgroud)

有人可以解释这一行的处理:string str = "ab" + 'c';

Mar*_*k B 8

你对第一行的想法是正确的,这正是发生的事情.

+文字字符串没有任何默认操作符,"ab"所以会发生什么是编译器接受(作为C风格的字符串)并使用const char*指向文字的指针.然后它会获取您的文字特征'c'并将其提升为int具有某些价值.然后将此int添加到文字的地址并用作C字符串.由于您已经超出了为文字字符串分配的空间,因此结果是未定义的,它只是从结果地址中打印出字符,直到找到空值.

如果你想一次性创建字符串,你可以帮助编译器找出你想要转换为string第一个转换:std::string str = std::string("ab") + 'c';.或者(如单独的注释中所示)使用串联来执行此操作,这可能会或可能不会更好地执行.使用你的情况看起来更清楚:std::string str = "ab"; str += 'c';.

在第二种情况下,您已经创建了一个string并且string具有重载功能operator+,可以实现直观的连接.

  • 马克的回答是正确的。但是请注意,您可以在不加任何 + 的情况下编写 "ab" "c",并且预处理器会为您连接它们。 (2认同)