2010-11-05 13 views
6

! Reddi!: Lütfen etiketsiz bildirimlerinden bahsediyorum. Bildiğim kadarıyla gayri resmi bir terim olduğunu ve bunun ne demek istediğimin beyanın bir yazım hatası olmadığını ve anonim bir nesnenin bir nesnesini beyan etmediğini biliyorum. Bu durumlarda her şey açıktır.anonim boş etiketsiz sınıflar, yapılar, sendikalar ve çeteleler

Soru 1: İyi oluşmuş C++ programı olup, aşağıdakilerden
? (Çoktan seçmeli)

//One 
int main(){ 
    struct{}; //or class{}; should be the same 
} 
//Two 
int main(){ 
    enum{}; 
} 
//Three 
int main(){ 
    union{}; 
} 

Açıklamalar:
MSVC9.0 üçünü kabul eder. Birincisinde bir uyarı verir. İki ve üç numarada 0 hata ve 0 uyarı alıyoruz. Online comeau sadece üç numaralı sayıyı kabul eder, bir ve iki numara bir teşhis mesajı ile derlenemez "beyanı hiçbir şey beyan etmez". Eğer, ikinci sırada, anonim numaralandırma en az bir numaralayıcıyı içeriyorsa, iki numara da comeau derleyicisi tarafından haklı olarak kabul edilir. comeau derleyici doğru olduğunu ve bu standart davranış ise

, o zaman içine biraz tutarsızlık görüyorum. Birincisinin neden reddedilmesi gerektiğini anlayabiliyorum. Ayrıca, ikinci neden niçin reddedileceğini (hiçbir şey olmadığını) anlayacağım, ancak bu durumda üçü de reddedilmelidir. Ve eğer üç sayı reddedilmemeli ise, o zaman birincisi ile gördüğüm tek fark, anoymous birliğin üyelerinin kapsamının dış alan olmasıdır. Ama bu, aynı zamanda, enumlar için de geçerlidir, bu yüzden, benim iddiam üç sayı kabul edilmelidir, o zaman iki numaralı olmalıdır.

Soru 2: comeau doğrudur
ise, benim yukarıdaki kararda neler hususlar eksik?

Not; Comeau desteğine bir e-posta yazdım. Cevabını alır almaz yayınlayacağım. Bunun

cevap

3

Yok yasaldır. Bkz. [Dcl.dcl] paragraf 3.

+0

Gerçek bir örnek için enum {}; ', daha az değil! Ben bir wannabe dil avukatıyım. – Cubbi

İlgili konular