Sdílet prostřednictvím


Jednoduché přiřazení (C++)

Operátor jednoduchého přiřazení (=) způsobí, že je hodnota druhého operandu uložena v objektu, který je zadán prvním operandem.Jsou-li oba objekty aritmetickými typy, je pravý operand přednostně převeden na typ levého operandu, kvůli uložení hodnoty.

Objekty typů const a volatile lze přiřadit l hodnotám typů, které jsou pouze typu volatile nebo typům, které jsou const, nikoli však volatile.

Přiřazení k objektům typu třídy (struct, union a typy tříd) je prováděno pomocí funkce operátoru pojmenování =.Výchozí chování této funkce operátoru je provedení bitového kopírování. Toto chování lze však změnit pomocí přetížených operátorů. (Další informace naleznete v části Přetížené operátory.)

Objekt libovolné jednoznačně odvozené třídy z dané základní třídy lze přiřadit k objektu základní třídy.Opačně to neplatí, protože mezi odvozenou třídou a základní třídou existuje explicitní převod, který však neexistuje mezi základní a odvozenou třídou.Příklad:

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

Přiřazení typů odkazů se chová, jako by byla přiřazení k objektu, na který odkazuje reference, právě vytvořena.

U objektů typu třídy se přiřazení liší od inicializace.Pro ilustraci různých přiřazení a inicializací uvažujme následující kód

UserType1 A;
UserType2 B = A;

Předchozí kód zobrazí inicializátor. Zavolá konstruktor UserType2, který přebírá argument typu UserType1.Zadaný kód

UserType1 A;
UserType2 B;

B = A;

příkaz přiřazení

B = A; 

může mít jednu z následujících funkcí:

  • Pro UserType2 je třeba zavolat funkční operátor =, který je součástí argumentu UserType1.

  • Bude-li taková funkce existovat, je třeba zavolat funkci explicitního převodu UserType1::operator UserType2.

  • Dále je třeba zavolat konstruktor UserType2::UserType2 za předpokladu, že takový konstruktor existuje a přebírá argument UserType1 a zkopíruje výsledek.

Viz také

Referenční dokumentace

Výrazy s binárními operátory