我有以下代码段:
#include <string>
int main(int argc, char *argv[])
{
std::string a, b, c;
a + b = c;
return 0;
}
为什么这个C ++代码不会产生编译时错误?这可能是因为std::string::operator+
已经实施的方式,但我的问题是:为什么这样实现?在什么情况下需要这种行为?
答案 0 :(得分:8)
您可以指定临时对象。没有规则阻止这种情况。
如果您不希望在临时(在 r-value 上,更常见地)上调用成员函数,则可以在函数声明中使用ref-qualifier。
但是,正如您可以看到here,std::string::operator=
没有 ref-qualified 版本。
我认为标准委员会不允许这种行为有明确的目标;我想这个选择背后的基本原理是尽可能减少程序员的规则,让他找到一个有用的应用程序,如果有的话可以存在。