(int) + 4*5;
Mengapa ini (menambahkan tipe dengan nilai) mungkin? (dicoba dengan g ++ dan gcc.)
Saya tahu itu tidak masuk akal (dan tidak berpengaruh), tetapi saya ingin tahu mengapa ini mungkin.
c++
c
casting
language-lawyer
Ernest Bredar
sumber
sumber
(int)-4*5
cppinsights
yang membantu untuk memahami bagaimana kode terlihat dari perspektif frontend compiler. Ini juga memiliki versi online, Anda dapat melihat apa yang diceritakannya tentang contoh Anda ('tanda kurung' yang sama dengan jawaban yang Anda berikan)+(int)+ 4*5;
dan-(int)- 4*5;
dan-+-+-(int)-+-+- 4*5;
dan kurang puitis;
Jawaban:
The
+
sini adalah unary+
operator yang , bukan operator tambahan biner . Tidak ada tambahan yang terjadi di sini.Juga, sintaks
(int)
digunakan untuk typecasting.Anda dapat membaca kembali pernyataan itu sebagai
(int) (+ 4) * 5;
yang diuraikan sebagai
((int) (+ 4)) * (5);
yang mengatakan,
+
operator unary pada nilai konstanta integer4
.int
5
Ini mirip dengan
(int) (- 4) * (5);
, di mana penggunaan operator unary lebih dikenal.Dalam kasus Anda, unary
+
dan cast toint
- keduanya berlebihan.sumber
(+ 4)
tidak membuat operand+4
, itu berarti menerapkan unary+
ke operand4
, yang memang merupakan no-op dalam kasus OP, tetapi dapat menyebabkan promosi integer atau kerusakan array dalam keadaan lain. Misalnyachar c = 0; sizeof +c == sizeof c
mungkin salah dansizeof +"a"
mungkin bukan 2.42;
:-)Ini diartikan sebagai
((int)(+4)) * 5
. Yaitu, ekspresi+4
(operator plus unary diterapkan ke literal4
), cast untuk mengetikint
dengan cast gaya C, dan hasil dikalikan dengan5
.sumber