C ve C ++ neden (int) + 4 * 5 ifadesine izin veriyor?


87
(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.



45
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')
Nikita Kniazev

22
Bu ifade eşdeğerdir +(int)+ 4*5;ve -(int)- 4*5;ve -+-+-(int)-+-+- 4*5;ve daha az şiirsel;
chqrlie

16
Seni şaşırtan kısım nedir? Tüm bildiğim, neden işaretini belirtmeden 5 tane yazmana izin verildiğini soruyorsun.
Carsten S

5
C ++, C-tipi yayınların C ++ 'da önerilmediği konusunda sizi uyarmalı mı?
Bay Lister

Yanıtlar:


141

+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

  1. Tekli +operatörü tamsayı sabiti değerine uygulayın 4.
  2. bir int
  3. operand ile çarp 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.


50
"Yazma", "tipleme" değil. Typecasting, oyuncuların başına gelen bir şeydir.
Keith Thompson

8
(+ 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.
chqrlie

7
"ikisi de gereksiz" - her şey gereksiz, aynen 42;:-) gibi
paxdiablo

11
Type Casting terimini kullanırken yanlış bir şey görmüyorum. Görünüşe göre tek ben değilim .
Ben

14
@Ben Typecasting, tip döküm değildir.
Kenneth K.

40

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.