字符串连接

Nix*_*Dev 14 c++ string

为什么可以做到

const string exclam = "!";
const string str = exclam + "Hello" + " world";
Run Code Online (Sandbox Code Playgroud)

而且不可能这样做:

const string exclam = "!";
const string str = "Hello" + " world" + exclam;
Run Code Online (Sandbox Code Playgroud)

我知道(虽然不明白为什么)不允许这样做:

const string str = "Hello" + " world" + "!";
Run Code Online (Sandbox Code Playgroud)

因为它将被解释为const char[6] + const char[6] + const char[1],所以从另一方面来说,为什么不允许这样做,或为什么它使用char[]而不是string.

Jam*_*lis 19

+运算符是左关联的(从左到右计算),因此+首先评估最左边的运算符.

exclam是一个std::string重载的对象,operator+以便以下两个执行连接:

exclam + "Hello"
"Hello" + exclam
Run Code Online (Sandbox Code Playgroud)

这两个都返回一个std::string包含连接字符串的对象.

但是,如果"添加"的前两个是字符串文字,如:

"Hello" + "World"
Run Code Online (Sandbox Code Playgroud)

没有涉及类类型对象(这里没有std::string).字符串文字转换为指针,没有内置的operator+指针.