【发布时间】:2015-09-13 22:26:05
【问题描述】:
我注意到当我初始化一个字符串时,编译器报告了一个我没有预料到的错误。
例如:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1 = "Hello", s2 = "World!"; // ok
string s3 = s1 + ", " + "World!"; // ok
string s4 = "Hello" + ", " + s2; // error
cout << s1 + " " + s2 << endl; //ok
return 0;
}
对我来说,如果 s3 工作得很好,s4 也应该这样做。
为什么会出现该错误?这两个初始化字符串(s3和s4)有什么区别?
【问题讨论】:
-
这只是C++的一点不便。您可以使用
std::string() + "Hello" + ...使其编译而不会造成重大损失。 -
如果您来自其他语言背景,您会惊讶地发现
"Hello"不是string。这就是你所有(不仅仅是)麻烦的原因。 -
@NeilKirk 这有点奇怪,但感谢您提供的信息。你知道为什么会这样吗?
-
@Walter 现在你真的引起了我的注意。你能多谈谈吗?
-
嗯,它是一个“字符串”,这取决于您所说的“字符串”是什么意思。它是存储在字符数组
const char[6]中的C 风格字符串。但它不是std::string