c++ - + 运算符,类类型和内置类型之间的区别?

标签 c++ function object constants operator-keyword

我是 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+s2x+y 都是右值。

但是,类类型的对象可能重载了 operator=string 就是这样做的。您可以在右值上调用成员函数。

这两种情况的区别在于=(不是+)

关于c++ - + 运算符,类类型和内置类型之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32009889/

相关文章:

c - 默认情况下函数是外部的吗?

python - 定义和绘制 Schechter 函数 : plot problems

Javascript:获取父级的原型(prototype) `this`

c++ - 如何确定 Box2d 中的相对碰撞角度

c++ - 返回指定类型的泛型函数

C++/openCV : cvConvert returns null

c++ - 是否可以创建一个 C++ 工厂系统来创建任何 "registered"对象类型的实例,而不考虑继承?

arrays - 如何将函数的所有结果存储到 Lua 中的单个变量中?

javascript - 具有对象数组的对象

c++ - 如何访问在当前函数范围之外创建的动态创建的对象?