(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.
cppinsights
któ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
.int
5
Jest 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 c
jest 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 int
z rzutowaniem w stylu C i wynik pomnożony przez 5
.
(int)-4*5