Assignation simple (C++)
L'opérateur d'assignation simple (=) entraîne la valeur du deuxième à stocker dans l'objet spécifié par le premier opérande.Si les deux objets sont des types arithmétiques, l'opérande est converti en type de la gauche, avant de stocker la valeur.
Des objets de types const et volatile peuvent être assignés à des valeurs lvalues des types qui sont simplement volatile ou qui ne sont pas des constantes ni volatiles.
L'assignation aux objets du type de classe (struct, union, et types de classe) est exécuté par une fonction nommée operator=.le comportement par défaut de cette fonction d'opérateur est d'effectuer une copie de bits ; toutefois, ce comportement peut être modifié à l'aide de les opérateurs surchargés.(Voir l' opérateurs surchargés pour plus d'informations.)
Un objet de toute classe clairement dérivée d'une classe de base données peut être assigné à un objet de la classe de base.L'inverse n'est pas vrai qu'il existe une conversion implicite de classe dérivée à la classe de base mais pas de classe de base pour la classe dérivée.Par exemple :
// 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
}
Les assignations aux types référence se comportent comme si l'assignation était effectué à l'objet auquel les points de référence.
Pour les objets de classe-type, l'assignation est différent de l'initialisation.Pour illustrer comment l'assignation et l'initialisation différents peuvent être, considérez le code
UserType1 A;
UserType2 B = A;
Le code précédent affiche un initialiseur ; il appelle le constructeur de UserType2 qui prend un argument de type UserType1.vu code
UserType1 A;
UserType2 B;
B = A;
l'instruction d'assignation
B = A;
peut avoir un des effets suivants :
Appelez l'operator= de fonction pour UserType2, si l'operator= est instrumenté d'argument d' UserType1 .
appelez la fonction explicite UserType1::operator UserType2de conversion, si une telle fonction existe.
appelez un constructeur UserType2::UserType2, si un tel constructeur existe, qui prend un argument d' UserType1 et copie le résultat.