C++/Modern C++(11, 14, 17, 20)
[C++11] explicit conversion functions
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`와 같은 상황을 허락하지 않는다.
이로 인해서 코드의 안정성을 높일 수 있다.