我有以下代码片段:
#include <string>
int main(int argc, char *argv[])
{
std::string a, b, c;
a + b = c;
return 0;
}
为什么这段 C++ 代码不会在编译时出错?可能是因为
std::string::operator+
的实现方式,但我的问题是:为什么要以这种方式实现它?在什么情况下需要这样的行为?我有以下代码片段:
#include <string>
int main(int argc, char *argv[])
{
std::string a, b, c;
a + b = c;
return 0;
}
std::string::operator+
的实现方式,但我的问题是:为什么要以这种方式实现它?在什么情况下需要这样的行为?您可以将值赋给临时对象,没有任何规则阻止这样做。
如果您不希望成员函数在临时对象(或更一般的r-value)上被调用,您可以在函数声明中使用ref-qualifier。
但正如您可以在这里看到的那样,std::string::operator=
没有ref-qualified版本。
我认为标准委员会并没有以明确的目标允许这种行为;我猜测这个选择背后的理由是尽可能地对程序员施加最少的规则,并让他自己找到有用的应用,如果存在的话。
class X a,b,c; a+b = c;
这样的表达式,其结果可能是期望的,其中临时变量导致某些修改的全局状态被更新。 - mksteve
a、b、c
为int
类型时相同。 - juanchopanzaoperator=
;在任何其他情况下,该表达式的行为类似于无操作,我认为。 - Paolo Mstd::string
。 - Karoly Horvath