我对 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
并且 string
有一个重载的 operator+
可以进行直观的连接。
关于C++ 将字符串文字添加到字 rune 字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5705956/