Atribuição simples (C++)
O operador de atribuição simples (=) faz com que o valor do segundo para ser armazenado no objeto especificado pelo primeiro operando.Se os dois objetos são de tipos de aritméticos, o operando direito é convertido para o tipo da esquerda, antes para armazenar o valor.
Objetos de tipos const e volátil podem ser atribuídos a l-valores de tipos que são apenas voláteis ou que não são const nem volátil.
Atribuição de objetos do tipo de classe (struct, união e tipos de classe) é executada por uma função chamada operador =.O comportamento padrão desta função de operador deve executar uma cópia bit a bit; No entanto, esse comportamento pode ser modificado usando operadores sobrecarregados.(Consulte Operadores sobrecarregados para obter mais informações.)
Um objeto de qualquer classe sem ambigüidade derivada de uma determinada classe base pode ser atribuído a um objeto da classe base.O inverso não é verdade porque há uma conversão implícita de classe derivada para a classe base, mas não a partir de uma classe base para a classe derivada.Por exemplo:
// 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
}
Atribuições para tipos de referência se comportam como se a atribuição estava sendo feita no objeto para o qual a referência aponta.
Para objetos do tipo de classe, a atribuição é diferente da inicialização.Para ilustrar como os diferentes atribuição e a inicialização pode ser, considere o código
UserType1 A;
UserType2 B = A;
O código anterior mostra um inicializador; ele chama o construtor para UserType2 que leva um argumento do tipo UserType1.Dado o código
UserType1 A;
UserType2 B;
B = A;
a instrução de atribuição
B = A;
pode ter um dos seguintes efeitos:
Chamar o operador = para UserType2, fornecido o operador = é fornecido com um UserType1 argumento.
Chamar a função de conversão explícita UserType1::operator UserType2, se uma função existe.
Chamar um construtor UserType2::UserType2, desde que tal um construtor existe, o que leva um UserType1 argumento e copia o resultado.