위 코드를 보면 객체의 초기화가 다소 의아한 형태로 이루어지고있다. 컴파일 에러가 일어나지 않을까 싶은데 컴파일 에러가 일어나지 않는다. C++의 암시적 형변환 규칙에 따르면 생성자의 인자가 1개인 생성자들은 컴파일러에 의해 암시적 형변환에 동원되도록 되어있다. 따라서 위의 코드 같은 경우에는 해당 라인에서 A( 5 ) 라는 객체가 임시적으로 생성되어 컴파일러가 자동으로 생성해준 복사 할당 연산자에 의해 해당 객체가 복사가 되어 컴파일 에러 없이 프로그램이 수행이 될 수 있다.
허나, 위와같은 컴파일러의 처리는 프로그래머 입장에서는 의도치 않은 에러가 생길 여지가 있다. 특히 위와 같은 경우는 컴파일 에러가 나지 않기 때문에 위와 같은 경우로 버그가 생긴다면 찾기가 굉장히 힘들수도 있다. 이럴때 차라리 컴파일 에러가 난다면 좋지 않을까?
그래서 사용하는 것이 explicit 이다.
위 처럼 사용하면 main의 첫번째 라인에서 컴파일 에러가 발생한다. 이유는 explicit로 선언된 생성자는 암시적 형변환에 사용될 수 없기 때문이다. 프로그래머의 의도로 암시적 형변환을 사용하지 않는다면 explicit을 하는것이 좋을것같다.
'Study > C/C++' 카테고리의 다른 글
[boost] boost::asio::ip::tcp::socket에서 ip address 추출하는 방법 (0) | 2015.03.25 |
---|---|
[WinAPI] CriticalSection (0) | 2015.03.09 |
[C++11] Thread Pool (0) | 2015.03.09 |
Class의 멤버함수 포인터 (0) | 2015.03.09 |
ERROR LINK2019 (0) | 2015.03.09 |