(int) + 4*5;
이것이 가능한 이유는 무엇입니까 (값이 있는 유형 추가) ? (g ++ 및 gcc로 시도했습니다.)
나는 그것이 의미가 없다는 것을 알고 있지만 (효과가 없음) 이것이 가능한 이유를 알고 싶습니다.
(int) + 4*5;
이것이 가능한 이유는 무엇입니까 (값이 있는 유형 추가) ? (g ++ 및 gcc로 시도했습니다.)
나는 그것이 의미가 없다는 것을 알고 있지만 (효과가 없음) 이것이 가능한 이유를 알고 싶습니다.
cppinsights
컴파일러 프런트 엔드 관점에서 코드가 어떻게 보이는지 이해하는 데 도움 이되는 유용한 도구가 있습니다 . 그것은 또한 온라인 버전을 가지고 있습니다, 당신은 그것이 당신의 예 에 대해 말하는 것을 볼 수 있습니다 (당신이 주어진 대답과 동일한 '괄호')
+(int)+ 4*5;
하고 -(int)- 4*5;
그리고 -+-+-(int)-+-+- 4*5;
덜 시적;
답변:
은 +
여기 단항 +
연산자 가 아닌 바이너리 더하기 연산자 . 여기에는 추가가 없습니다.
또한 구문 (int)
은 형변환에 사용됩니다.
그 진술을 다음과 같이 다시 읽을 수 있습니다.
(int) (+ 4) * 5;
다음과 같이 구문 분석됩니다.
((int) (+ 4)) * (5);
즉,
+
정수 상수 값에 단항 연산자를 적용합니다 4
.int
5
이것은 (int) (- 4) * (5);
단항 연산자의 사용법이 더 익숙한에서 와 유사합니다 .
귀하의 경우에는 단항 +
과 캐스트가 int
모두 중복됩니다.
(+ 4)
피연산자를 만들지+4
않는다는 것은 피연산자 에 단항 +
을 적용하는 것을 의미합니다. 4
이는 실제로 OP의 경우에는 작동하지 않지만 다른 상황에서는 정수 승격 또는 배열 붕괴를 일으킬 수 있습니다. 예를 들어 char c = 0; sizeof +c == sizeof c
아마도 거짓과 sizeof +"a"
하지 2. 아마
42;
:-)
이것은로 해석됩니다 ((int)(+4)) * 5
. 즉, 표현식 +4
(리터럴에 적용된 단항 더하기 연산자 4
), int
C 스타일 캐스트 를 사용하여 유형 으로 캐스트하고 결과에 5
.
(int)-4*5