Przypisanie proste (C++)
Prosty operator przypisania (=) powoduje, że wartość drugiego operatora będzie przechowywana w obiekcie, który jest określony przez pierwszy operand.Jeśli oba obiekty są typami arytmetycznymi, prawy operand jest konwertowany na typ po lewej stronie, przed zachowaniem wartości.
Obiekty typu const i volatile mogą być przypisane do typów l-wartości, które są po prostu volatile lub const.
Przypisanie do obiektów klasy typów (struct, union oraz typy klas) jest wykonywane przez funkcję o nazwie operator=.Domyślne zachowanie tej funkcji operatora ma wykonywać kopię logiczną; jednak to zachowanie może być modyfikowane przy użyciu przeciążonych operatorów. Aby uzyskać więcej informacji, zobacz Przeciążone operatory.
Obiekt dowolnej jednoznacznej pochodnej klasy od danej klasy podstawowej może być przypisany do obiektu klasy podstawowej.W drugą stronę ten warunek nie jest spełniony, ponieważ nie istnieje niejawna konwersja z klasy pochodnej do klasy podstawowej, ale nie z klasy podstawowej do klasy pochodnej.Na przykład:
// expre_SimpleAssignment.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class ABase
{
public:
ABase() { cout << "constructing ABase\n"; }
};
class ADerived : public ABase
{
public:
ADerived() { cout << "constructing ADerived\n"; }
};
int main()
{
ABase aBase;
ADerived aDerived;
aBase = aDerived; // OK
aDerived = aBase; // C2679
}
Przydziały z typów referencyjnych zachowują się tak, jakby przypisania zostały zrobione do obiektu, do którego wskazuje odwołanie.
Dla obiekt typu klasy, przypisanie różni się od inicjowania.Aby zilustrować jak różne mogą być przypisania i inicjowanie, należy rozważyć kod
UserType1 A;
UserType2 B = A;
W poprzednim kodzie zaprezentowano inicjator, który wywołuje konstruktor dla UserType2, który pobiera argument typu UserType1Podany kod
UserType1 A;
UserType2 B;
B = A;
Instrukcja przypisania
B = A;
może mieć jeden z następujących efektów:
Wywołanie funkcji operator= dla UserType2, dostarczony operator = jest podany z argumentem UserType1.
Wywołanie funkcji konwersji jawnej UserType1::operator UserType2, jeśli istnieje taka funkcja.
Wywołanie konstruktora UserType2::UserType2, jeśli taki konstruktor jest dostarczony, który przyjmuje, jako argument UserType1 i kopiuje wynik.