Sono nuovo alla programmazione. scusa per il mio cattivo inglese. Ho provato a usare rvalue come inizializzatore per gli oggetti iniziali. Quindi, secondo il codice, stamperebbe quali sono gli operatori di costruzione e assegnazione utilizzati. Ma ho scoperto gli oggetti "what2" e "what3", quelli non stampano nulla. ecco il codice:rvalore come inizializzatore per costruire un oggetto
#include <iostream>
using namespace std;
class X{
public:
int x;
X()= default;
X(int num):x{num}{}
X(const X& y){
x = y.x;
std::cout << "copy constructor" << std::endl;
std::cout << x << std::endl;
}
X& operator=(const X& d){
x = d.x;
std::cout << "copy assignment" << std::endl;
return *this;
}
X(X&& y){
x = y.x;
std::cout << "move constructor" << std::endl;
}
X& operator=(X&& b){
x = b.x;
std::cout << "move assignment" << std::endl;
return *this;
}
};
X operator +(const X& a,const X& b){
X tmp{};
tmp.x = a.x +b.x;
return tmp;
}
int main(int argc, const char * argv[]) {
X a{7} , b{11};
X what1;
cout << "---------------" << endl;
what1 = a+b;
cout << "---------------" << endl;
X what2{a+b};
cout << "---------------" << endl;
X what3 = a+b;
cout << "---------------" << endl;
std::cout << what1.x << std::endl;
std::cout << what2.x << std:: endl;
std::cout <<what3.x << std::endl;
return 0;
}
l'output è:
---------------
move assignment
---------------
---------------
---------------
18
18
18
Program ended with exit code: 0
solo
"What1" utilizza l'assegnazione in modo corretto. quindi, come posso usare rvalue per iniziare un oggetto? e usando operator = per iniziare un oggetto? grazie mille.
forse utile: [Copia Elision] (https: // en. wikipedia.org/wiki/Copy_elision) – AndyG
Prova 'X what3 = std :: move (what1);' e guarda cosa succede. – AndyG
Come posso disabilitarlo? Perché voglio vedere come viene chiamata la copia o lo spostamento. –