본문 바로가기
프로그래밍/C++

C++] explicit 키워드

by eteo 2025. 5. 6.

 

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;
}