묵시적 형변환

조회수 620회

제가 C++ 프로그램 작성하면서 형 변환 때문에 실수를 많이 하고 있습니다. 그래서 혹시 변수의 묵시적 형 변환을 막는 키워드 같은게 존재할까요?

explicit 라는 키워드가 존재하는데 이건 생성자에 대해서만 적용되는 것 같더라고요

제가 개발하는 환경에서

  1. int = int
  2. int = DoubleToInt(double value, int mul)

이런 경우가 잘 나오는데 실수로 2번에서

int = double

이런 식으로 형변환을 해주지 않는 실수하는 경우가 좀 있어서요

혹시 실수하지 않는 팁 같은 것 알려주실 수 있으실까요 ㅠㅠ

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    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로 초기화하는 경우 값의 손실 가능성이 없기 때문에 정상 컴파일이 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 좋은 정보 감사합니다!! 김태환 2023.10.23 14:11

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)