请允许我先向您展示我的代码:
void testStringAdd(){
char c = '$';
string str = "";
str += c;//the same as `str = str + c;`
cout << str << "---";
cout << "size : " << str.size() << endl;
str = "" + c;//the same as `str = c + ""`;
cout << str << "---";
cout << "size : "<< str.size() << endl;
}
我预计输出是:
$---size : 1
$---size : 1
但是vs2013上的真实输出是:
$---size : 1
---size : 0
这是一个有趣的现象,我想知道为什么会这么奇怪?
注意:如果我编写 string str = "";
则 str == ""
将返回 true。
最佳答案
在 str = ""+ c;
中,""
不是 std::string
,它是一个 string literal类型为const char[]
,然后衰减为const char*
和""+ c
成为指针运算。
在这种情况下,由于 c
具有正值,""+ c
将导致 UB ,这意味着一切皆有可能。程序没有崩溃对您来说可能是幸运的(或不幸的)。
正如评论所指出的,显式转换为 std::string
将解决这个问题。
str = std::string("") + c;
或者使用std::string literal operator (自 C++14 起):
str = ""s + c;
关于c++ - 为什么在我向空字符串添加一个字符时返回一个未知值(如 ""+ c)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36580226/