我是 C++ 新手。我读的书告诉我,如果加号 (+
) 运算符已为某些类对象(例如 string
类)重载,以使这个问题更加具体。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1("abc");
string s2("def");
string s3("def");
cout<<(s1+s2=s3)<<endl;
int x=1;
int y=2
int z=3;
cout<<(x+y=z)<<endl;
return 0;
}
如您所料,第一个 cout
语句是正确的,而第二个语句是错误的。编译器提示 x+y
不是可修改的左值。我的问题是为什么 +
运算符为 string
对象返回一个可修改的左值,而不是 int
?
最佳答案
它不会为字符串返回可修改的左值。它返回一个临时对象,s1+s2
和 x+y
都是右值。
但是,类类型的对象可能重载了 operator=
,string
就是这样做的。您可以在右值上调用成员函数。
这两种情况的区别在于=
(不是+
)
关于c++ - + 运算符,类类型和内置类型之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32009889/