(int) + 4*5;
Dlaczego jest to możliwe (dodanie typu z wartością) ? (próbowano z g ++ i gcc.)
Wiem, że to nie ma sensu (i nie ma wpływu), ale chcę wiedzieć, dlaczego jest to możliwe.
(int) + 4*5;
Dlaczego jest to możliwe (dodanie typu z wartością) ? (próbowano z g ++ i gcc.)
Wiem, że to nie ma sensu (i nie ma wpływu), ale chcę wiedzieć, dlaczego jest to możliwe.
cppinsightsktóre pomaga zrozumieć, jak wygląda kod z perspektywy frontendu kompilatora. Ma również wersję online, możesz zobaczyć, co mówi o twoim przykładzie (to samo
+(int)+ 4*5;i -(int)- 4*5;i -+-+-(int)-+-+- 4*5;i mniej poetycko;
Odpowiedzi:
+Tutaj jest jednoargumentowy +operator , a nie binarny operator dodawania . Tutaj nic się nie dzieje.
Również składnia (int)jest używana do rzutowania typów.
Możesz ponownie przeczytać to oświadczenie jako
(int) (+ 4) * 5;
który jest analizowany jako
((int) (+ 4)) * (5);
który mówi,
+operator do stałej wartości całkowitej 4.int5Jest to podobne do sytuacji (int) (- 4) * (5);, gdy użycie jednoargumentowego operatora jest bardziej znane.
W twoim przypadku jednoargumentowy +i rzut do int- oba są zbędne.
(+ 4)nie jest operandem+4 , oznacza to zastosowanie unary +do operandu 4, co w rzeczywistości jest brakiem operacji w przypadku OP, ale może spowodować promocję liczby całkowitej lub rozpad tablicy w innych okolicznościach. Na przykład char c = 0; sizeof +c == sizeof cjest prawdopodobnie fałszem i sizeof +"a"prawdopodobnie nie jest 2.
42;:-)
Jest to interpretowane jako ((int)(+4)) * 5. Oznacza to, że wyrażenie +4(jednoargumentowy operator plus zastosowany do literału 4), rzutowanie na typ intz rzutowaniem w stylu C i wynik pomnożony przez 5.
(int)-4*5