Asignación simple (C++)

El operador de asignación simple (=) hace que el valor del segundo operando se almacene en el objeto especificado por el primer operando.Si ambos objetos son de tipos aritméticos, el operando derecho se convierte al tipo de la izquierda, antes de almacenar el valor.

Los objetos const y tipos volátiles pueden asignarse a valores l de tipos que simplemente son volátiles o que no son const o volatile.

La asignación a los objetos de tipo de clase (struct, unión, y de clase) realiza una función denominada operator=.El comportamiento predeterminado de esta función de operador es realizar una copia bit a bit; sin embargo, este comportamiento se puede modificar con operadores sobrecargados.(Vea operadores sobrecargados para obtener más información.)

Un objeto de clase derivada de una clase base determinada se puede asignar de forma inequívoca un objeto de clase base.El inverso no es true porque hay una conversión implícita de la clase derivada a la clase base pero no de la clase base para la clase derivada.Por ejemplo:

// 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
}

Las asignaciones a los tipos de referencia se comportan como si la asignación se creó el objeto al que señala la referencia.

Para los objetos de tipo de clase, la asignación es diferente de la inicialización.Para mostrar cómo la diferentes asignación y inicialización pueden ser, considere el código

UserType1 A;
UserType2 B = A;

El código anterior muestra un inicializador; llama al constructor para UserType2 que toma un argumento de UserType1escrito.dado el código

UserType1 A;
UserType2 B;

B = A;

la instrucción de asignación

B = A; 

puede tener uno de los efectos siguientes:

  • Llame al operator= de la función para UserType2, siempre que el operator= se proporcione un argumento de UserType1 .

  • Llame a la función de conversión explícita UserType1::operator UserType2, si existe una función.

  • Llamar a un constructor UserType2::UserType2, siempre que exista el constructor, que toma un argumento de UserType1 y copia el resultado.

Vea también

Referencia

Expresiones con operadores binarios