我有一个关于 C++ 中字符串连接的问题。
string str = "ab" + 'c';
cout << str << endl;
char ch = 'c';
string str1 = "ab";
string str2 = str1 + ch;
cout << str2 << endl;
该代码产生:
ed before SaveGraphicsState
abc
有人可以解释一下这一行的处理吗:string str = "ab" + 'c';
?
您对第一行的想法是正确的,这正是正在发生的事情。
没有任何默认值+
文字字符串的运算符,例如"ab"
所以发生的事情是编译器接受它(作为 C 风格的字符串)并使用const char*
指向文字的指针。然后它会获取你的字面字符'c'
并将其推广至int
具有一定的价值。然后将此 int 添加到文字的地址并用作 C 字符串。由于您超出了为文字字符串分配的空间,因此结果是未定义的,它只是从结果地址打印出字符,直到找到空值为止。
如果您想一次性创建字符串,您可以帮助编译器确定您想要转换为string
首先是演员表:std::string str = std::string("ab") + 'c';
。或者(如单独的评论中所示)使用串联来执行,这可能会或可能不会表现得更好。使用对您的情况更清晰的选项:std::string str = "ab"; str += 'c';
.
在第二种情况下,您已经创建了一个string
and string
有一个超载的operator+
这就是直观的串联。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)