(int) + 4*5;
Bu (bir değer içeren bir tür eklemek) neden mümkün? (g ++ ve gcc ile denendi.)
Bunun mantıklı olmadığını (ve hiçbir etkisi olmadığını) biliyorum, ancak bunun neden mümkün olduğunu bilmek istiyorum.
(int) + 4*5;
Bu (bir değer içeren bir tür eklemek) neden mümkün? (g ++ ve gcc ile denendi.)
Bunun mantıklı olmadığını (ve hiçbir etkisi olmadığını) biliyorum, ancak bunun neden mümkün olduğunu bilmek istiyorum.
cppinsights
Derleyici ön uç perspektifinden kodun nasıl göründüğünü anlamaya yardımcı olan kullanışlı bir araç var . Ayrıca çevrimiçi bir versiyonu da var , örneğiniz hakkında ne anlattığını görebilirsiniz (size verilen cevaplarla aynı 'parantez')
+(int)+ 4*5;
ve -(int)- 4*5;
ve -+-+-(int)-+-+- 4*5;
ve daha az şiirsel;
Yanıtlar:
+
Burada tek terimli +
operatör değil, ikili toplama operatörü . Burada hiçbir ilave olmuyor.
Ayrıca, yazım için sözdizimi (int)
kullanılır.
Bu ifadeyi şu şekilde yeniden okuyabilirsiniz:
(int) (+ 4) * 5;
hangi olarak ayrıştırılır
((int) (+ 4)) * (5);
diyor ki
+
operatörü tamsayı sabiti değerine uygulayın 4
.int
5
Bu, (int) (- 4) * (5);
tekli operatörün kullanımının daha aşina olduğu yere benzer .
Sizin durumunuzda, unary +
ve cast int
- ikisi de gereksizdir.
(+ 4)
değil işlenen yapmak+4
, bu araçlar tekli uygulamak +
işlenene 4
gerçekten OP'ın durumunda no-op olduğunu, ancak diğer durumlarda tamsayı promosyon veya dizi çürüklerine neden olabilir. Örneğin char c = 0; sizeof +c == sizeof c
muhtemelen yanlıştır ve sizeof +"a"
muhtemelen 2 değildir.
42;
:-) gibi
Bu olarak yorumlanır ((int)(+4)) * 5
. Diğer bir deyişle, bir ifade +4
(bir değişmeze uygulanan bir tekli artı operatörü 4
), int
C tarzı bir dönüşümle yazıya dönüştürülür ve sonuç ile çarpılır 5
.
(int)-4*5