본문 바로가기

Programming/C / C++

[C++] Explicit과 Mutable

 explicit  
 : explicit이라는 키워드는 명시적 호출만을 허용하겠다는 것이다. 예제를 통해 알아 보자. 
  explicit은 위에서 설명한거와 같이 여기에서 AAA라는 생성자가 명시적으로 호출될 지언정 묵시적으로 호출되는 것은 막겠다는 것인데, C++에서 일반적인 객체 생성 방법은 AAA a1(10); 으로 사용한다. 이 문장은 생성자를 명시적으로 호출하는 부분이다. 
 AAA a1=10;  , AAA a1(10); 이 두개의 문장은 완전히 똑같은 문장이 아니고AAA a1=10; 의 의미는 C++ 스타일 초기화 문법으로 묵시적으로  형변환이 되어서 완료가 되는 형태를 가지고 있다. 
 그래서 C 스타일 초기화 문법이 호출되는 방식이 C++ 스타일로 묵시적으로 변환이 되어서 호출 되니까, 이 경우에는 객체 생성 과정에 있어서 AAA 생성자를 묵시적으로 호출하는 것이 되므로, 컴파일 에러가 난다. (묵시적 호출을 막고 있는 키워드 explicit을 사용하고 있으므로)
 explicit이라는 문법이 필요한 이유는 C 스타일의 초기화 문법 자체가 혼란 스러울 수 있으므로, 클래스 생성자의 선언 및 사용을 할시에는 explicit을 써주는것이 좋다. 

 mutable  
 mutable은 onst로 선언되어 있는 함수 내에서, 멤버 변수의 조작 가능한 변수로 선언하겠다는 의미를 가진다. 앞서 const에 대한 저자의 포스팅을 봤다면, mutable은 거의 쓸일이 없는 문법이라는걸 눈치 챘을 것이다.