암시적 변환(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;
}
출처