본문 바로가기

C++/C++ 문법

[C++] explicit

728x90
반응형

묵시적 형 변환

 

앞선 포스팅에서 설명했던 대입을 사용한 객체의 초기화와 괄호를 사용하여 인자를 전달하는 초기화는 결과적으로 같다고 했다.

 

이렇게 되는 이유는 대입을 사용해도 묵시적으로 괄호를 사용한 것처럼 변환되기 때문이다.

 

묵시적 형 변환을 사용하면 편리하긴 하지만 코드가 자동으로 변환되는 것이 항상 좋은 일은 아니다.

 

따라서 묵시적 형 변환을 금지하고 싶다면 explicit 키워드를 사용할 수 있다.

 

 

 

 

 

 

explicit

 

explicit 키워드는 생성자를 선언할 때 생성자 앞에 붙여서 사용할 수 있다.

 

class AAA {
private:
	int num;
public:
	explicit AAA(int n)
		:num(n)
        { }
}

 

위 코드와 같이 작성했다면 아래와 같은 선언은 불가능하게 된다.

AAA a = 5;

 

 

 

마찬가지로 복사생성자에도 사용하는 것이 가능하다.

 

class AAA {
private:
	int num;
public:
	explicit AAA(const AAA &copy)
		:num(copy.num)
        { }
}

 

따라서 위 코드처럼 사용하면 더 이상 아래 코드처럼 객체를 생성하는 것이 불가능하다.

AAA a;

AAA b = a;

 

 

 

728x90
반응형