簡単な代入演算子 (=) は2 番目のオペランドの値を 1 番目のオペランドで指定されたオブジェクトに格納します。両方のオブジェクトが数値型の場合右オペランドは値を格納する前に左の型に変換されます。
定数のオブジェクトと volatile 型は揮発性であるか定数または volatile ではない型の左辺値に割り当てることができます。
クラス型 (構造体共用体クラス型のオブジェクトへの代入は operator= という名前の関数によって実行されます。この演算子関数の既定の動作はコピーをビットごとに実行されます ; ただしこの動作はオーバーロードされた演算子を使用して変更できます。(詳細については オーバーロードされた演算子 を参照してください)。
明確に特定の基本クラスから派生クラスのオブジェクトは基本クラスのオブジェクトに割り当てることができます。は派生クラスから基本クラスには基本クラスから派生クラスへの暗黙の型変換があるためコントロールではありません。次に例を示します。
// 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
}
参照型への割り当てはが参照ポイントに渡されるオブジェクトと同様に動作します。
クラス型のオブジェクトに対して割り当ては初期化とは異なります。別の割り当ておよび初期化がどのようになるかわかるようにコードがあるとします。
UserType1 A;
UserType2 B = A;
前のコードの初期化子を示しています ; これは UserType1 型の引数を受け取る UserType2 のコンストラクターを呼び出します。コードを指定します。
UserType1 A;
UserType2 B;
B = A;
代入ステートメント
B = A;
次の 1 種類の効果を使用する場合 :
operator= が UserType1 の引数が付いている場合UserType2 の関数を呼び出します。operator=
このような関数がある場合は明示的な変換関数 UserType1::operator UserType2 を呼び出します。
UserType1 の引数を受け取り結果をこのようなコピー コンストラクターが存在する場合にコンストラクターに UserType2::UserType2 を照会します。