CPP) explicit 키워드

Bogoomi·2022년 6월 19일
0

C++

목록 보기
7/8

explicit 이란 무엇인가.
묵시적 형변환을 하지 못하도록 막는 키워드다.


우선 형변환의 종류에 대해 알아보자.

명시적 형변환

  • 변환할 자료형을 변환 대상 변수명 앞에 붙여주는 것을 명시적 형변환이라고 한다.

예시코드

int intValue = 5;
int second = 2;

float floatValue = first / second;
float floatValue2 = (float) first / second;

// result
// 2
// 2.5

묵시적 형변환

  • 명시적 형변환과 다르게 데이터 앞에 변환할 자료형을 붙여주지 않고 값을 변환하는 것을 의미한다.


    위의 예시코드 중..
float floatValue = first / second;


그래서 explicit을 왜 써야하는가?

C++에서는 황당한 묵시적 형변환이 일어나곤 한다.

예시코드

class Bobo
{
public:
	Bobo( int val = 0 )
	{
		num = val;	
	}
	
	void Print() const 
	{
		cout << num << endl;
	}
private:
	int num;
};

int main()
{
	Bobo boo;
	boo = 10;
	boo.Print();
	return 0;
}

// 결과
// 10

컴파일러가 class Bobo에 int형 변수를 할당하는 할당 연산자를 찾게 되는데
위 클래스에서 operator= 에 관련된 함수는 만들지 않았다.
그래서 컴파일러는 비슷한 녀석을 찾다가 int를 매개변수로 갖는 생성자를 찾아
지멋대로 pt = 10;을 pt = Point(10); 으로 변환시켜
임시 객체인 Point(10)을 복사 할당 연산자(복사 할당 연산자를 따로 만들지 않는다면
자동으로 생성)를 호출해 pt에 대입킨다.
ㅋㅋ 이걸 막아주는게 explicit 키워드이다.

처음엔 뭔 소린가 싶었다. 여러번 읽어보니 대충 감이 온다. C++은 저런것도 신경써줘야하는게 참 단점이자 장점인가 싶다..

profile
개에에에바알

0개의 댓글