프로그래밍/C++

[C/C++] explicit 키워드 알아보기

NIA1995 2020. 7. 22. 18:42

explicit은 '명백한, 명시적인'등의 사전적 의미를 가지고 있습니다. C++에서는 이 키워드를 명시적인 형 변환을 위해 사용합니다. 해당 키워드를 사용하여 생성자를 선언할 경우 암시적인 타입 변환을 할 수 없게 됩니다. 이를 간단한 예제를 통해 알아보겠습니다.

 

using namespace std;

class Function
{
public:
	int Num1;

	Function(int A) : Num1(A) {};
};

void Print(Function Func)
{
	cout << Func.Num1 << endl;
}

int main()
{
	int A = 5;
	Print(5);
}

 

예제를 보면 메인 함수의 Print 함수의 인자로 Function 객체가 아닌 int 객체를 넣어도 암시적 형 변환을 통해 결과를 도출합니다. 이렇게 유용하게 사용될 수도 있지만 프로그래머의 예측과는 다르게 작동할 수 도 있습니다.

 

이를 막기 위해 explicit 키워드를 사용, 암시적인 형 변환을 막아줄 수 있습니다. 실제로 effective C++에서는 explicit의 사용을 권장하고 있습니다.

 

#include <iostream>

using namespace std;

class Function
{
public:
	int Num1;

	explicit Function(int A) : Num1(A) {};
};

void Print(Function Func)
{
	cout << Func.Num1 << endl;
}

int main()
{
	int A = 5;

	Print(5); --> 예외 발생!
	Print(Function(5)); --> 형변환 성공!
}