【发布时间】:2015-11-07 16:47:22
【问题描述】:
我是 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?
【问题讨论】:
-
在 C++ 中,对象是任何类型的实例,包括内置类型。类型就是类型。所以“对象”与“内置类型”没有任何意义。
-
@juanchopanza 提供正确的措辞会很有用:)
-
@Quentin 我猜“内置类型和用户定义类型之间的差异”是准确的。
标签: c++ function object constants operator-keyword