为什么这个std :: string C ++代码没有给出编译时错误?

时间:2015-11-30 16:27:33

标签: c++ string move-semantics

我有以下代码段:

#include <string>

int main(int argc, char *argv[])
{
    std::string a, b, c;
    a + b = c;
    return 0;
}

为什么这个C ++代码不会产生编译时错误?这可能是因为std::string::operator+已经实施的方式,但我的问题是:为什么这样实现?在什么情况下需要这种行为?

1 个答案:

答案 0 :(得分:8)

您可以指定临时对象。没有规则阻止这种情况。

如果您不希望在临时(在 r-value 上,更常见地)上调用成员函数,则可以在函数声明中使用ref-qualifier

但是,正如您可以看到herestd::string::operator=没有 ref-qualified 版本。

我认为标准委员会不允许这种行为有明确的目标;我想这个选择背后的基本原理是尽可能减少程序员的规则,让他找到一个有用的应用程序,如果有的话可以存在。