C++ explicit

mohadang·2023년 3월 11일
0

C++

목록 보기
43/48
post-thumbnail

C++ 사용시 암시적인 형변환으로 인하여 예측하지 못한 동작이 발생하는 경우가 있다.
암시적인 형 변환은 컴파일러가 현재 가장 일치하는 타입으로 자동으로 변환하여 처리하는 동작을 말한다.

class A{
public:
   int num;
   A(int n) : num(n){};
};
void printA(A a){
   std::cout << a.num << std::endl;
}
int main(){
   int n = 26;
   printA(n);//여기서 n은 A(26)으로 변환되어 호출된다.
}

printA(n) 호출시 A(26) 생성자를 호출하여 객체를 생성한 다음 printA로 전달 된다.
사실 컴파일러가 문제가 발생 시켜야 하는데(의도적으로 이렇게 작성하는 경우는 코드 가독성 면에서 절대 좋은 코드가 아니다) 그렇지 않고 암시적 형변환으로 처리되어 문제없이 동작된다.

이런 문제를 방지하기 위해서는 생성자 앞에 explicit 키워드를 붙여서 암시적인 형변환이 발생하지 않도록 처리 해야한다.

explicit A(int n) : num(n){};

이후 부터는 컴파일 에러가 발생하며 만약 진짜로 호출하고 싶다면 명시적으로 직접 호출 해주어야 한다.

printA(A(n));
profile
mohadang

0개의 댓글