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
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.
Sabit XML ayrıştırma ve düzenli HTML i...
PHP, neden&;/> script lt; ayrıştırma...
Can sıkıcı "Sistem Explorer Opera...
O'mümkün düzenli HTML/ayrıştırma ...
Neden sıralanmamış bir dizi daha hızlı...