C++中的字符串和int连接

lch*_*lch 0 c++ string int concatenation stdstring

string words[5];
for (int i = 0; i < 5; ++i) {
    words[i] = "word" + i;
}

for (int i = 0; i < 5; ++i) {
    cout<<words[i]<<endl;
}
Run Code Online (Sandbox Code Playgroud)

我期望结果如下:

word1
.
.
word5
Run Code Online (Sandbox Code Playgroud)

在控制台中打印如下:

word
ord
rd
d
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我这个的原因.我相信在java中它将按预期打印.

son*_*yao 8

C++不是Java.

在C++中,"word" + i是指针算术,它不是字符串连接.请注意,字符串文字 的类型"word"const char[5](包括空字符'\0'),然后衰减到const char*此处.因此,"word" + 0你将得到一个指向const char*第一个字符(即w)的类型的指针,因为"word" + 1你将获得指向第二个字符(即o)的指针,依此类推.

你可以使用operator+std::stringstd::to_string(因为C++ 11)在这里.

words[i] = "word" + std::to_string(i);
Run Code Online (Sandbox Code Playgroud)

顺便说一句:如果你想word1word5,你应该用std::to_string(i + 1)而不是std::to_string(i).