위 소스를 그대로 컴파일과 실행을 시키게 된다면 특별하게 문제가 되는 곳은 없습니다.
일단 소스에서 main부분을 보게 된다면
Test test1 = 10;
이 부분에서는 객체를 생성해서 거기에 10이라는 값을 넣는다라는 뜻이지만,
묵시적으로 c++ 컴파일러에서 자동으로 생성자로 생성을 하게 됩니다.
그리고
function(10);
이 부분에서도 매개변수로 Test형으로 취해져야 하지만, c++ 컴파일러에서
묵시적으로 Test형으로 변환을 시켜 주게 됩니다.
이렇게 비슷하게 소스를 작성하더라도 별 문제 없이 실행이 되는데,
나중에는 이런 예외 상황 때문에 원치 않는 값이 들어 갈 수도 있게 됩니다.
그래서 위처럼 묵시적으로 타입 변환을 원치 않을 경우
밑의 소스처럼 사용을 할 수 있습니다.
위 소스 처럼 클래스에서 생성자를 선언 할 때 explicit 키워드를 사용하시면 됩니다.
즉, 묵시적인 타입 변환을 하지 않고 명시적으로 타입 변환을 하였을 경우에만 사용하겠다는 뜻입니다.
그래서 똑같은 소스에서 묵시적으로 타입변환이 되었던
Test test1 = 10;
function(10);
이 두문장이 에러가 나게 되는 것입니다.
그래서 왠만하면 explicit 키워드를 이용해서 예외 상황을 조금 줄이는 것도 괜찮을 것이라
생각이 듭니다.
'C++ Language > Tip / Information' 카테고리의 다른 글
const_cast 키워드 (0) | 2010.02.12 |
---|---|
mutable 키워드 (0) | 2010.02.12 |
상수함수란?! (0) | 2010.02.12 |
C++ 코딩 스타일(제가 사용하는 코딩 스타일입니다.) (0) | 2009.04.29 |
C++언어가 C언어와 달라진 점 (1) | 2009.04.29 |