Compartilhar via


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.

Consulte também

Referência

Expressões com operadores binários