Partager via


Assignation simple (C++)

L'opérateur d'assignation simple (=) entraîne le stockage de la valeur du second opérande dans l'objet spécifié par le premier opérande. Si les deux objets sont de type arithmétique, l'opérande droit est converti en type de l'opérande gauche avant le stockage de la valeur.

Les objets de types const et volatile peuvent être assignés à des lvalues de types qui sont simplement volatile ou qui ne sont ni const ni volatile.

L'assignation à des objets de type classe (types struct, union et classe) est exécutée par une fonction nommée operator=. Le comportement par défaut de cette fonction d'opérateur consiste à effectuer une copie de bits ; toutefois, ce comportement peut être modifié à l'aide d'opérateurs surchargés. (Pour plus d'informations, consultez Opérateurs surchargés.)

Un objet de toute classe clairement dérivée d'une classe de base donnée peut être assigné à un objet de la classe de base. L'inverse n'est pas vrai, car il existe une conversion implicite de la classe dérivée vers la classe de base mais pas de la classe de base vers 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ée à l'objet auquel la référence pointe.

Pour les objets de type classe, l'assignation est différente de l'initialisation. Pour illustrer les différences entre l'assignation et l'initialisation, prenez le code

UserType1 A;
UserType2 B = A;

Le code précédent illustre un initialiseur ; il appelle le constructeur de UserType2 qui accepte un argument de type UserType1. Étant donné le code

UserType1 A;
UserType2 B;

B = A;

l'instruction d'assignation

B = A; 

peut avoir l'un des effets suivants :

  • Appelez la fonction operator= pour UserType2, à condition que operator= possède un argument UserType1.

  • Appelez la fonction de conversion explicite UserType1::operator UserType2, si une telle fonction existe.

  • Appelez un constructeur UserType2::UserType2, si un tel constructeur existe, qui accepte un argument UserType1 et copie le résultat.

Voir aussi

Référence

Expressions avec opérateurs binaires