묵시적 형변환
조회수 879회
제가 C++ 프로그램 작성하면서 형 변환 때문에 실수를 많이 하고 있습니다. 그래서 혹시 변수의 묵시적 형 변환을 막는 키워드 같은게 존재할까요?
explicit 라는 키워드가 존재하는데 이건 생성자에 대해서만 적용되는 것 같더라고요
제가 개발하는 환경에서
- int = int
- int = DoubleToInt(double value, int mul)
이런 경우가 잘 나오는데 실수로 2번에서
int = double
이런 식으로 형변환을 해주지 않는 실수하는 경우가 좀 있어서요
혹시 실수하지 않는 팁 같은 것 알려주실 수 있으실까요 ㅠㅠ
1 답변
-
int a=10; double b=1.2;
위와 같은 상황에서
a=b;
하시면 암시적 형변환이 일어납니다. 이걸 막을 순 없고요. 대신 경고 메시지가 출력되기 때문에 확인이 가능합니다.유지 보수 차원에서 static_cast를 이용해서 형변환을 명시적으로 하시는 것이 좋습니다. 즉,
a=static_cast<int>(b);
처럼 사용합니다.암시적으로 형변환을 한 경우, 작성자의 의도인지 코딩 실수인지 파악해야 하지만 명시적으로 형변환을 하게되면 작성자는 의도적으로 형변환하고 있다는 것을 알 수 있습니다.
역사적으로 아래의 순서로 발전한 것인데 다 사용이 가능하지만 마지막이 가장 보기 좋습니다.
a=(int)b; // c 스타일 a=int(b); // c++ 스타일 a=int{b}; // c++ 스타일 a=static_cast<int>(b); // c++ 스타일
위의 설명은 기존 변수에 대입하는 과정에서의 설명이고, 새로운 변수를 선언하는 것이라면 아래와 같이 하시면 됩니다.
int c{a}; // 정상 int d{b}; // 컴파일 오류 double e{a}; // 정상
{}
를 사용하여 변수를 초기화 하게되면 int에서 int로 초기화하는 경우에는 정상 컴파일, double에서 int로 초기화하게면 값의 손실 가능성이 있기 때문에 컴파일 오류를 출력합니다. int에서 double로 초기화하는 경우 값의 손실 가능성이 없기 때문에 정상 컴파일이 됩니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력