본문 바로가기
개발/C++

explicit 키워드

by 사과잼빵 2016. 10. 20.
#pragma once
#include <iostream>

using namespace std;
class AA
{
public:
	AA(void);
	AA(int param1); 
	~AA(void);

	void print(void);

private:
	int _param1;
};



#include <iostream>
#include "AA.h"

using namespace std;

void printValue(AA printValue)
{
	printValue.print();
}

void main(void)
{
	int inputValue;
	
	
	printValue(5);


	cin>>inputValue;
}


위와 같이 printValue 함수에는 인자로 AA클래스를 전달해주도록 되어있지만 AA클래스의 생성자에 int형 변수를 받는 생성자가 있으므로 int 변수가 AA클래스로 암시적 형변환이 일어나서 정상 작동이 된다. 

하지만 이런 암시적 변환이 프로그래머가 의도치 않은 것이라면 치명적인 오류를 발생 시킬수 있다. 이것을 막기 위한 키워드가 explicit 키워드이며 다음과 같이 사용한다.


 

#pragma once
#include <iostream>

using namespace std;
class AA
{
public:
	AA(void);
	explicit AA(int param1); 
	~AA(void);

	void print(void);

private:
	int _param1;
};

헤더파일에서 생성자에 위의 코드와 같이 explicit 키워드를 붙이게되면 암시적 형변환을 막아주기 때문에 printValue(5)와 같은 함수 호출은 컴파일 단계에서 에러를 발생시키게 된다.


explicit 키워드를 습관적으로 사용한다면 코드가 복잡해졌을때 예기치 못한 버그를 발생시킬 확률을 줄여줄 것 같다. 

'개발 > C++' 카테고리의 다른 글

복사 생성자와 복사 대입연산자  (0) 2016.10.22
가상 함수  (0) 2015.10.06
c++11에 추가된 기능 - auto 변수  (0) 2015.09.30
클래스 전방선언  (0) 2015.09.30