(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.
(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.
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 integer 4
.int
5
Ini mirip dengan (int) (- 4) * (5);
, di mana penggunaan operator unary lebih dikenal.
Dalam kasus Anda, unary +
dan cast to int
- keduanya berlebihan.
(+ 4)
tidak membuat operand+4
, itu berarti menerapkan unary +
ke operand 4
, yang memang merupakan no-op dalam kasus OP, tetapi dapat menyebabkan promosi integer atau kerusakan array dalam keadaan lain. Misalnya char c = 0; sizeof +c == sizeof c
mungkin salah dan sizeof +"a"
mungkin bukan 2.
42;
:-)
Ini diartikan sebagai ((int)(+4)) * 5
. Yaitu, ekspresi +4
(operator plus unary diterapkan ke literal 4
), cast untuk mengetik int
dengan cast gaya C, dan hasil dikalikan dengan 5
.
(int)-4*5