2009-02-27 12 views
11

Herkes bana bu dökümün ne için geçerli olduğunu söyler (happyNumber'i 1337'ye ayarlamanın yanı sıra), eğer varsa, ve başka bir etkisi yoksa, nasıl böyle bir kod yazabilirim ??? Bu derleyici bir hata mı, yoksa C++ 'nun bazı gizli özellikleri mi?Çoklu argümanlarla static_cast ile n'aber?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337); 

Bu, herşeyin derlemesiyle şaşırdım. Yanlışlıkla ikinci parametreyi, çevrilmekte olan ifadenin bir işlev çağrısında bulunması gereken bir şeye ayarladığım bir hatadan buldum. Bu, nesnenin ikinci parametreden çıkarıldığı ve yalnızca bir argümanla işlev çağrıldığı kötü bir hatayla sonuçlandı. Bu derlenmiş ... Ve başlangıçta ben Microsoft Visual C++ 2008

+0

Bu kesinlikle okunaklı ve hata yok. – Anonymous

+0

Ah, evet haklısınız. O zaman o kadar kafa karıştırıcıydı ki ben * biliyordum * derleyici bir hata olmalıydı - ki o değildi :) Daha önce hiç bir zaman virgül operatörüne rastlamadım. – Statement

cevap

30

Statik dökme bir argüman alır, ama onun argümanı bir ifadesidir ve ifadeler comma operator içerebilir kullanıyorum ...

bom vermedi. Virgül onların yan etkileri için aynı anda iki veya daha fazla deyimleri değerlendirmek istediğiniz durumlarda, örneğin kullanılır: Yalnızca başlatıcı, koşul için bir ifadeyi her değerlendirilebilir

Biraz yararlıdır
int i, j; 
for (i=0, j=0; i < 10; i++,j++) { 
    // do stuff 
} 

çünkü onsuz ve for döngüsünün kısımlarına (veya bir ifadenin beklendiği başka bir yere) devam edin. Yine de, en açık kod için geçerli değildir ve semantikler tuhaftır. Gözlemlediğiniz gibi, virgülle ayrılmış bir sıra son ifadesinin değerini değerlendirir.

+0

Sözdizimi için kullanımını anlıyorum, ancak bir static_cast dosyasında işlevselliği yakalayamıyorum. – Statement

+0

İşlevselliği yoktur. Sadece virgül operatörünü kullanarak bazı işlemler yaparsınız ve sonucu yazarsınız. – Anonymous

+0

Ah siz ve Ruben sayesinde şimdi nasıl çalıştığını anlamak ve yeni bir şey :) – Statement

İlgili konular