explicit 키워드

😎·2023년 1월 14일
0

CPP

목록 보기
36/46

explicit

explicit 는 분명한, 명백한이라는 의미가 있다. 이 키워드는 자신이 원하지 않은 형변환이 일어나지 않도록 제한한다. 즉, 묵시적 형변환을 하지 못하도록 막는다.

아래 예시를 보면, explicit 키워드에 C(B const &_) 생성자가 있다. 생성자에 expilict 키워드를 사용한다면 컴파일러가 알아서 형변환 하는것을 막을 수 있다.

f 함수C 클래스의 객체를 매개변수로 받는다. main 문을 보면 A 클래스 생성자와 B클래스 생성자로 매개 변수로 받는다.

#include <iostream>

class A {};
class B {};

class C {
  public:
            C(A const &_) { return; }
   explicit C(B const &_) { return; }
};

void f(C const &_) { return; }

int main(void) {
  f( A() );
  f( B() );
  return 0;
}

Aexplicit 키워드가 없어서 묵시적 캐스팅시 성공하는 것을 볼 수 있다. 하지만 위험할 것이다.

Bexplicit 키워드가 있기 때문에 에러가 출력된다.

explicit 키워드를 사용한다면 사용자가 상황에 맞게 직접 형 변환을 해주어야 한다.

#include <iostream>

class A {};
class B {};

class C {
  public:
            C(A const &_) { return; }
   explicit C(B const &_) { return; }
};

void f(C const &_) { return; }

int main(void) {
  f( A() );
  f( static_cast<C>( B()) );
  return 0;
}

C 로 캐스트하면 문제가 에러가 없어진다.

안전한 형변환이 있어야한다면, explicit 키워드를 사용하자!

참고자료

https://aossuper8.tistory.com/114

profile
jaekim

0개의 댓글