단순 할당 (C++)
단순 할당 연산자(=)는 두 번째 피연산자의 값이 첫 번째 피연산자로 지정된 개체에 저장되도록 합니다. 두 개체가 모두 산술 형식인 경우 값을 저장하기 전에 오른쪽 피연산자가 왼쪽 피연산자의 형식으로 변환됩니다.
const 및 volatile 형식의 개체는 volatile인 형식이나 const 및 volatile이 아닌 형식의 l-value에 할당될 수 있습니다.
클래스 형식(구조체, 공용 구조체 및 클래스 형식)의 개체에 대한 할당은 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;
다음과 같은 결과 중 하나를 생성할 수 있습니다.
operator=이 UserType1 인수와 함께 제공된 경우 UserType2에 대해 operator= 함수를 호출합니다.
명시적 변환 함수 UserType1::operator UserType2를 호출합니다(이러한 함수가 있는 경우).
UserType1 인수를 사용하고 결과를 복사하는 생성자 UserType2::UserType2를 호출합니다(이러한 생성자가 있는 경우).