SORU
15 EYLÜL 2009, Salı


En can sıkıcı ayrıştırma: neden't Bir bir yok(()); iş?

Taşma öğretti Yığın olarak bilinen birçok şeyler arasında "en can sıkıcı ayrıştırma klasik gibi . bir çizgi ile gösterdi",

A a(B()); //declares a function

Bu sırada, en çok, sezgisel görünüyor Bildirgesi'nin bir nesne a tipi A alarak bir geçici B nesne olarak bir constructor parametre, aslında ilan fonksiyonu a dönen A, alarak bir işaretçi işlevi döndürür B ve kendisi herhangi bir parametre alır. Benzer şekilde hat

A a(); //declares a function

ayrıca bir nesne yerine, bir işlev bildirir beri aynı kategori altında düşüyor. Şimdi, ilk vaka, her zamanki gibi geçici çözüm için bu sorun olur fazladan iki parantez/parantez etrafında B(), derleyici sonra yorumlamak olarak beyan bir nesne

A a((B())); //declares an object

Ancak, ikinci durumda, aynı şeyi bir derleme hatası neden olur

A a(()); //compile error

Bir sorum var, neden? Evet ben çok iyi farkında bu doğru 'çözüm' onu değiştirmek için A a; ama ben merak etmiyor musun ne olduğunu ekstra () mu için derleyici ilk örnek değil o zaman iş ne zaman yeniden uygulamak bu ikinci örnek. A a((B())); geçici çözüm, özel bir durum standardı yazılır?

CEVAP
15 EYLÜL 2009, Salı


Aydınlanmış cevap yok, C dili ile geçerli sözdizimi olarak tanımlı değil, çünkü sadece... yani, Dilin tanımı gereği.

Eğer içinde bir ifade varsa geçerlidir. Örneğin:

 ((0));//compiles

Daha fazla dilde nasıl tanımlandığına ve derleyicilerin nasıl çalıştığını öğrenmek için Formal language theory öğrenmelisin. daha doğrusu Context Free Grammars (CFG) ve Sonlu durum makineleri ile ilgili malzeme. Eğer wikipedia sayfalar yetmez ama ilgilenen varsa, bir kitap almak gerekecek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C++

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • MVLV28

    MVLV28

    17 Mart 2008
  • PlugResearch

    PlugResearch

    22 Mart 2006