프로그래밍/C/C++

[C++] explicit - 정보공유의 장

nanze 2022. 1. 15. 20:02
반응형

explicit keyword

이번 포스팅은 explicit 키워드에 대해서 알아보겠다. 짧게 설명하자면 explicit 키워드는 컴파일러에 의한 자동 형변환이 일어나지 않도록 해준다. 

 

다음 코드를 보자.

#include <iostream>

using namespace std;

class Test
{
public:
    Test(int n){
        mNumber = n;
    };
    int mNumber;
};

void func(Test t){
    wcout << t.mNumber << endl;
}

int main()
{
    int k = 2;
    func(k);
    return 0;
}

컴파일러는 func(k) 호출 부분에서 Test 에 대한 형변환을 자동으로 수행하고 넘기도록 한다. 그래서 Test 클래스의 생성자가 자동으로 호출되게 된다. 

하지만 프로그램 개발자는 그것이 원치않는 행동일 수도 있다. 그렇기에 이러한 자동 형변환을 막기 위해서 explicit 키워드를 사용할 수 있다. 다음 코드를 보자.

#include <iostream>

using namespace std;

class Test
{
public:
    explicit Test(int n){
        mNumber = n;
    };
    int mNumber;
};

void func(Test t){
    wcout << t.mNumber << endl;
}

int main()
{
    int k = 2;
    func(k);
    return 0;
}

위 코드를 수행하면 컴파일 시 에러가 발생한다. 위 코드를 정상적으로 호출하기 위해서는 func(k) 가 아닌 func(Test(k)) 로 수정해야 올바르게 컴파일된다. 

반응형