Sono nuovo del C++. Il libro che ho letto mi dice che se l'operatore più (+
) è stato sovraccaricato per qualche oggetto di classe, ad esempio la classe string
, per rendere questo problema più concreto.L'operatore +, differenza tra tipi di classi e tipi built-in?
#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;
}
Come ci si potrebbe aspettare, la prima cout
affermazione è corretta, mentre il secondo è sbagliato. Il reclamo del compilatore x+y
non è un lvalue modificabile. La mia domanda è: perché l'operatore +
restituisce un lvalue modificabile per gli oggetti string
ma non per int
?
In C++, gli oggetti sono istanze di qualsiasi tipo, inclusi i tipi built-in. E i tipi sono tipi. Quindi "oggetti" contro "tipi built-in" non ha senso. – juanchopanza
@juanchopanza Sarebbe utile fornire la dicitura corretta mentre ci si trova :) – Quentin
@Quentin Suppongo che "la differenza tra tipi predefiniti e tipi definiti dall'utente" sia accurata. – juanchopanza