(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.
cppinsightsDerleyici ö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.int5Bu, (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 4gerç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 cmuhtemelen 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), intC tarzı bir dönüşümle yazıya dönüştürülür ve sonuç ile çarpılır 5.
(int)-4*5