문제 5 · static_cast와 문자 산술
문제 5 [2점]
아래 코드를 읽고, 출력을 예상하여 작성하세요.
cpp
double x = static_cast<double>(3 / 6);
double y = x *= 2;
cout << static_cast<char>('a' + ++y) << '\"'
<< static_cast<char>('a' + x++) << '\"';풀이 및 해설
변수의 초기값부터 정확히 잡는 것이 관건입니다.
3 / 6은 정수 나눗셈이라0. 그 뒤static_cast<double>을 해도 이미0이므로x = 0.0. (형변환은 나눗셈이 끝난 다음에 적용됨에 주의)x *= 2는x = 0.0 * 2 = 0.0이고, 그 대입식의 값이y에 들어가y = 0.0.
이제 출력식을 왼쪽에서 오른쪽으로 계산합니다.
++y는 전위 증가pre-increment라y를 먼저1.0으로 만든 뒤 그 값을 사용 →'a' + 1.0 = 97 + 1 = 98→static_cast<char>(98)=b'\"'→ 큰따옴표 문자"x++는 후위 증가라 현재 값0.0을 먼저 사용하고x는1.0이 됨 →'a' + 0.0 = 97→static_cast<char>(97)=a'\"'→ 큰따옴표 문자"
이어 붙이면 출력은 b"a" 입니다. (줄바꿈 없음)