본문 바로가기
프로그래밍/C++

explicit, mutable

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 24.




명시적인 것만을 허용하는 explicit 키워드

#include <iostream>

class AAA
{
public:
	// 묵시적인 변환을 막는 explicit 키워드
	explicit AAA(int n)
	{
		std::cout << "explicit AAA( int n ) " << std::endl;
	}
};

void main()
{
	// 문제 없다.
	AAA a(10);
	// 생성자에 explicit를 선언 하였기 때문에 묵시적인 변환이 불가능.
//	AAA a = 10;
}​



예외를 허용하는 mutable 키워드

#include <iostream>

class AAA
{
	// mutable 키워드를 사용한 int val1
	mutable int val1;
	int val2;
public:
	// const를 사용해 멤버 변수의 수정을 막고 있으나
	void SetData( int a, int b ) const
	{
		val1 = a;	// mutable이라서 가능.
//		val2 = b;	// 컴파일 오류
	}
};

void main()
{
	AAA a1;
	a1.SetData( 10, 20 );
}​


explicit 같은 경우에는 프로그래머가 원한다면 애용하는 것도 나쁘지 않다고 생각하지만,
mutable 같은 경우엔 차라리 없는게 나을지도 모르겠다.
const를 붙혀준 함수에서 꼭 데이터를 수정해야 하는가 하는 의문도 들고,
정말로 수정을 원한다면 차라리 const를 지워서 사용을 하던지 하는게 낫지 않을까??
책에 있길래 포스팅은 해봤지만 자주 할것 같이 보이진 않는다.
그냥 남이 썻을때 그런 의도가 있다는 것만 파악 할 수 있는 수준이면 충분할듯.