explicit 키워드

암시적 변환(implicit conversion)

void DoSomethingWithString(MyString s) {
  // Do something...
}

// 암시적 변환
// DoSomethingWithString(MyString("abc"))와 동일
DoSomethingWithString("abc")
  • 암시적 변환이 언제나 사용자에게 편리한 건 아님
  • 의도되지 않은 암시적 변환이 일어나 문제를 야기

explicit

  • 원하지 않는 암시적 변환을 막도록 컴파일러에게 명시
class MyString {
  char* string_content;  // 문자열 데이터를 가리키는 포인터
  int string_length;     // 문자열 길이

  int memory_capacity;

 public:
  // capacity 만큼 미리 할당함. (explicit 키워드에 주목)
  explicit MyString(int capacity);

  // 문자열로 부터 생성
  MyString(const char* str);

  // 복사 생성자
  MyString(const MyString& str);

  ~MyString();

  int length() const;
  int capacity() const;
};

// .. (생략) ..

void DoSomethingWithString(MyString s) {
  // Do something...
}

int main() {
  
  // 컴파일 에러
  // *explicit 키워드가 없었다면
  // DoSomethingWithString(MyString(3)); 으로 치환
  DoSomethingWithString(3);  

  MyString s = "abc";  // MyString s("abc") 허용
  MyString s(5);   // 허용

  // 컴파일 에러
  // *explicit 키워드가 없었다면
  // MyString s = MyString(5); 으로 치환
  MyString s = 5;  
  
}

출처

Categories: ,

Updated: