(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.
c++
c
casting
language-lawyer
Ernest Bredar
źródło
źródło
(int)-4*5
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łkowitej4
.int
5
Jest to podobne do sytuacji
(int) (- 4) * (5);
, gdy użycie jednoargumentowego operatora jest bardziej znane.W twoim przypadku jednoargumentowy
+
i rzut doint
- oba są zbędne.źródło
(+ 4)
nie jest operandem+4
, oznacza to zastosowanie unary+
do operandu4
, 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ładchar c = 0; sizeof +c == sizeof c
jest prawdopodobnie fałszem isizeof +"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łu4
), rzutowanie na typint
z rzutowaniem w stylu C i wynik pomnożony przez5
.źródło