상세 컨텐츠

본문 제목

[C++11] explicit conversion functions

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 24. 15:58

본문

`explicit` 키워드는 명시적이라는 의미를 내포하고 있다.

 

`explicit conversion functions`은 명시적 변환 함수를 의미하며 변환 함수에 `explicit` 키워드를 붙임으로써 암시적으로 호출되는 변환 함수를 막겠다는 의미다.

 

다음 같은 상황을 보도록 하자.

 

#include <iostream>

struct A {
	operator bool() const { return true; }
};

struct B {
	explicit operator bool() const {return true;}
};

int main(void)
{
	A a;
	if (a); // Ok calls A::operator bool()
	bool aaa = a; // OK A::operator bool() is called
	B b;
	if (b); // Ok calls B::operator bool()
	bool bbb = b; // error

}

`A::operator bool()`를 보면 `explicit` 키워드가 붙어져 있지 않은 것을 볼 수 있다.

 

이 말은 `bool aaa = a`와 같은 암시적으로 변환 함수를 호출할 수 있다는 것이다.

 

하지만 `B::operator bool()``explicit` 키워드가 선언되어 있어 `bool bbb = b`와 같은 상황을 허락하지 않는다.

 

이로 인해서 코드의 안정성을 높일 수 있다.

관련글 더보기