'C++' explicit

토스트·2025년 5월 2일

'C++' basic

목록 보기
24/35

explicit

implicit type casting(암시적 또는 묵시적 형 변환)을 방지하기 위해 사용되는 키워드입니다.

explicit 키워드는 생성자(constructor)변환 연산자(operator Type())에만 사용할 수 있습니다.

C++에서 컴파일러는 때때로 자동으로 형 변환을 수행합니다.

<예시> | 암시적 형 변환

#include <iostream>

using namespace std;

class MyClass {
public:
    MyClass(int x) {
        cout << "MyClass: " << x << endl;
    }
};

void printValue(MyClass obj) {
    cout << "printValue" << endl;
}

int main() {
    printValue(10);  // 암시적 형 변환: 10이 MyClass(10)으로 변환됨

    return 0;
}

결과

<예시> | explicit 사용

#include <iostream>

using namespace std;

class MyClass {
public:
    explicit MyClass(int x) {
        cout << "MyClass: " << x << endl;
    }
};

void printValue(MyClass obj) {
    cout << "printValue" << endl;
}

int main() {
    // printValue(10);  // 컴파일 오류 : explicit 키워드로 인해 암묵적 형 변환이 안됨.
    printValue(MyClass(10)); // 명시적 호출

    return 0;
}

사용 이유

  • 예상하지 못한 타입 변환으로 인한 버그나 오류를 방지합니다.
  • 명시적 형 변환으로 코드가 더 명확해지고 가독성이 향상됩니다.

잘못 사용할 경우 코드가 더 복잡해질 수 있으므로, 필요할 때만 사용하는 것이 좋습니다.

<예시> | 변환 연산자

#include <iostream>

using namespace std;

class MyClass {
public:
    explicit operator int() {
        return 42;
    }
};

int main() {
    MyClass obj;

    // int x = obj;  // 컴파일 오류 : explicit 키워드 때문에 암묵적 형 변환이 불가능
    int x = static_cast<int>(obj);  

    cout << x;
}

결과

0개의 댓글