(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은 const로 선언되어 있는 함수 내에서, 멤버 변수의 조작 가능한 변수로 선언하겠다는 의미를 가진다. mutable은 거의 쓸일이 없는 문법이다.
: 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은 const로 선언되어 있는 함수 내에서, 멤버 변수의 조작 가능한 변수로 선언하겠다는 의미를 가진다. mutable은 거의 쓸일이 없는 문법이다.
댓글
댓글 쓰기