`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`와 같은 상황을 허락하지 않는다.
이로 인해서 코드의 안정성을 높일 수 있다.
[C++11] Special member functions for move semantics (1) | 2023.08.24 |
---|---|
[C++11] Converting constructors (Braced list syntax) (0) | 2023.08.24 |
[C++11] Inline namespaces (0) | 2023.08.24 |
[C++11] Non-static data member initializers (0) | 2023.08.24 |
[C++11] Right angle brackets (0) | 2023.08.23 |