explicit 키워드
C++에서 매개변수를 하나만 받는 생성자는 암시적으로 변환되어 객체를 생성할 수 있는데 이는 원하지 않은 변환을 초래할 가능성이 있다. 이를 방지하고 코드의 안정성을 높이기 위해 생성자 앞에 explicit 키워드를 사용한다.
explicit 키워드 없이 암시적 형 변환이 발생하는 경우
#include <iostream>
class MyClass {
public:
MyClass(int value) : data(value) {} // explicit 키워드 없음
int getData() const { return data; }
private:
int data;
};
void printMyClass(MyClass myClass){
std::cout << myClass.getData() << std::endl;
}
int main() {
printMyClass(10);
return 0;
}
🔍 위 코드에서 explicit 키워드가 필요한 이유
- 암시적 변환이 발생하면 코드가 직관적이지 않다.
- printMyClass(10);은 얼핏 보면 int를 받는 함수처럼 보이지만, 사실 내부적으로 MyClass(10)으로 변환되므로 코드를 읽는 사람에게 혼란을 줄 수 있다.
- 예상치 못한 변환을 방지
- 만약 MyClass가 여러 개의 생성자를 가진다면, 어떤 변환이 발생할지 예측하기 어려워진다.
- 함수 오버로딩과 충돌 가능성
- printMyClass(int x)와 printMyClass(MyClass myClass) 같은 함수가 공존하면, 어떤 함수가 호출될지 명확하지 않다.
explicit 키워드를 사용하여 암시적 형 변환을 막는 경우
#include <iostream>
class MyClass {
public:
explicit MyClass(int value) : data(value) {} // explicit 키워드 추가
int getData() const { return data; }
private:
int data;
};
void printMyClass(MyClass myClass){
std::cout << myClass.getData() << std::endl;
}
int main() {
//printMyClass(10); // 오류: 암시적 형 변환이 막힘
printMyClass(MyClass(10)); // 명시적 변환, 정상 동작
return 0;
}
'프로그래밍 > C++' 카테고리의 다른 글
C++] Intel hex to bin 변환 프로그램 (TI C2000 시리즈) (0) | 2025.05.24 |
---|---|
C++] std::chrono 라이브러리 (0) | 2025.05.12 |
C++ ] uint8_t, int_8t를 스트림 연산자(<<)로 출력할 때의 문제점 (0) | 2025.04.18 |
C++] 파일 입출력시 최적화 방안 (0) | 2025.04.17 |
C++ ] <random> 헤더 사용 난수 생성 (0) | 2024.12.03 |