[C++] 변환 생성자

연두비두밥·2024년 2월 16일
post-thumbnail

변환 생성자

매개변수가 기본 자료형 하나인 생성자를 말합니다. 이러한 생성자의 문제점은 사용자의 의도와 별개로 컴파일러가 암시적으로 호출할 수 있다는 점입니다.

#include <iostream>

class Money
{
public:
    Money() : amount{ 0.0 } {};
    Money(double _amount) : amount{ _amount } {};

    double amount;
};

void display_balance(const Money balance)
{
    std::cout << "The balance is: " << balance.amount;
}

int main(int argc, char* argv[])
{
    Money payable{ 79.99 };

    display_balance(payable); // 1. 변환이 필요X
    display_balance(49.95); // 2. 변환이 필요
    display_balance(9.99f); // 변환이 필요

    return 0;
}
}
  1. display_balance 형식의 인수를 사용하는 Money 함수에 대한 첫 번째 호출의 경우 인수가 올바른 형식이므로 변환이 필요하지 않습니다.
  2. display_balance에서는 값 49.95가 있는 인수 double의 형식이 함수에 필요한 것이 아니기 때문에 변환이 필요합니다. (Money가 필요하다) 함수는 이 값을 직접 사용할 수 없지만 인수 double 형식에서 일치하는 매개 변수 Money 형식으로 변환되므로 형식의 Money 임시 값이 인수에서 생성되고 함수 호출을 완료하는 데 사용됩니다.

즉, 아래와 같이 된다.

display_balance(Money(49.95));

때문에 의도치 않은 인자를 전달했을 때도 컴파일러가 암시적 변환을 하여 컴파일 에러가 발생하지 않아 잘못된 부분을 찾기 힘들 수 있습니다.
이를 막기 위해 explicit 키워드를 사용합니다.

사용자 정의 형식 변환_MSDN

profile
꾸준하고 싶은 사람

0개의 댓글