SORU
13 Kasım 2010, CUMARTESİ


Saf sanal işlevler satıriçi bir tanım olmayabilir. Neden?

Saf sanal fonksiyonlar sanal olanlar üye fonksiyonları vardırsaf belirleyicisi( = 0; )

Yan 10.4 paragraf 2C 03 bize soyut bir sınıf ve bir yan not olarak, şunları söyledi:

[Not: fonksiyon bildirimi bir saf-belirleyici bir ve bir tanım sağlar —son not] [Örnek:

struct C {
virtual void f() = 0 { }; // ill-formed
};

uç bir örnek]

Konu hakkında bilgi sahibi olan çok olanlar için, lütfen unutmayınsaf sanal fonksiyon tanımları olabilirama yukarıdaki tümce içi görünmesi için bu tür tanımları (lexically sınıf) yasaklıyor. (Görebilirsiniz saf sanal fonksiyonlar tanımlama kullanır, örneğin, this GotW)

Şimdi tüm fonksiyonları başka türlü ve türleri için sınıf tanımını sağlamak için izin verilir, ve bu kısıtlama ilk bakışta kesinlikle yapay ve anlaşılmaz görünüyor. Aklıma geldi, ikinci ve sonraki bakışlar :) üzerinde gibi görünüyor Ama kısıtlama varsa bunun için özel bir nedeni olmasaydı orada olmazdı sanırım.

Benim soru: herkes yapıyorbiliyorumo özel sebep?İyitahmin de açığız.

Notlar:

  • MSVC İÇERİR. içi tanımları izin vermiyor. Bu yüzden sürpriz olsun :) yok
  • kelime bu soru inline başvurmuyorsatır içianahtar kelime. Demeklexically sınıf

CEVAP
18 Kasım 2010, PERŞEMBE


Bu ÇOK iş parçacığı “Why pure virtual function is initialized by 0?” Jerry Tabut sağlanan bu tekliften Bjarne Stroustrup&berti'nin The Design & Evolution of C Bölüm §13.2.3, nerede olduğum eklenen bazı vurgu parçası bence uygundur:

=0 meraklı sözdizimi tercih edildi tanıtımı bariz alternatif yeni bir anahtar kelime ya da çünkü saf soyut zamanda alma şansları gördüm yeni bir anahtar kelime kabul etti. Vardı saf, Sürüm 2.0 olurdu önerdi soyut sınıflar ile birlikte. Güzel bir sözdizimi arasında bir seçim göz önüne alındığında ve soyut sınıflar, soyut seçtim sınıflar. Gecikme riske atmaktansa ve ödemeden bazı kavgalar üzerine gelenek C kullandım ve C saf 0 temsil etmek için kullanarak Kongre "orada değil." =0 sözdizimi ile uyuyor işlev gövdesi bu benim görüşüm bir işlev için başlatıcıve de (basit, ama genellikle yeterli) sanal fonksiyonların kümesi görüntüleyin bir vektör olarak uygulanan işlev işaretçileri. [ &üssün; ]

Ne zaman seçme sözdizimi Bjarne olduğunu düşünerek bir fonksiyonu vücut olarak bir tür başlatıcı parçası Bildiricisi, ve =0 alternatif bir form başlatıcı, bir belirtti ve "ceset&" (ya da sözlerini,"; yok&").

Bir de belirtmek &; orada& "değil" savunuyor; ve beden &a-kavramsal resim var.

Ya da, hala kavramsal resimde, iki başlatıcılar sahip.

Şimdi, o telepatik güçlerim, google-foo ve yumuşak akıl gider kadarıyla. Kimse Yeterli İlgi™ tamamen sözdizimsel bu kısıtlama kararının iptal edilmesi hakkında Komite için bir öneri formüle edilmiş, ve bu durumun gerektirdiği tüm çalışmaları takip ediyor inanıyorum. Böylece hala öyle.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • Fuse

    Fuse

    21 Kasım 2005