tipo teorico tener punteros programas practico objetos expresion ejemplos debe completo clase c++ function object const operator-keyword

c++ - teorico - ¿El operador+, diferencia entre los tipos de clase y los tipos incorporados?



manual completo de c++ pdf (2)

No devuelve un lvalue modificable para la cadena. Devuelve un objeto temporal, y s1+s2 y x+y son ambos valores.

Sin embargo, los objetos de tipo de clase pueden tener un operator= sobrecargado operator= , lo que hace la string . Se le permite llamar a funciones miembro en rvalues.

La diferencia entre los dos casos está en = (no + )

Soy nuevo en C ++. El libro que leí me dice que si el operador más ( + ) se ha sobrecargado para algún objeto de clase, por ejemplo, la clase de string , para hacer este problema más concreto.

#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; }

Como puede esperar, la primera declaración de cout es correcta, mientras que la segunda es incorrecta. Las quejas del compilador x+y no es un lvalor modificable. Mi pregunta es ¿por qué el operador + devuelve un lvalue modificable para string objetos de string pero no para int ?


Para std::string , s1 + s2 = s3 es de hecho:

(operator+(s1, s2)).operator =(s3)

s1 + s2 devuelve un rvalor

Los métodos de los miembros pueden aplicarse también a los temporales.
Desde C ++ 11, tenemos el calificador lvalue / rvalue para el método,
por lo que puede prohibir o1 + o2 = o3 para su tipo personalizado con:

struct Object { Object& operator =(const Object& rhs) & ; // Note the & here };

por lo tanto, Object::operator = solo se puede aplicar a lvalue.