SORU
8 EYLÜL 2014, PAZARTESİ


Neden kod açıkça bir boş gösterici ile statik bir yöntem çağrısı istiyorsunuz?

Eski projelerin bir çift bu gibi bir kod gördüm:

class Class {
    static void Method() {}
};

((Class*)0)->Method();

Bu kodu boş bir işaretçi (daha sonra ne olursa olsun) kaldırma içerir çünkü tanımsız davranış var. Gerçekten hiçbir mantıklı - döküm derleyici adı yazın beslemek için vardır ve yukarıdaki kodu yazan kişinin yerine bunu yazmış olabilir:

Class::Method();

ve ikincisi olur.

Neden kimse eski kod yazmak istiyorsunuz? Bazı eski güzel günler veya ne bilinen bir deyim vardır?

CEVAP
8 EYLÜL 2014, PAZARTESİ


Statik üye fonksiyonları AT&T, C Dili Sistemi Release 2.0 1989, (pre-standardizasyon) C " devreye alındı. Bundan önce, static anahtar kelime statik üye fonksiyonları için kullanılabilir değil, kod yazarlar geçici çözümler, bir null işaretçi indirecting gözlenen bir prensip olarak kullandı.

Selected Readings beraberindeki sürüm 2.0 AT&T, C Dili Sistem, bölüm 1-22, Stroustrup yazar:

Ayrıca, bu tür nonportable kodu: görülmüştür

((X*)0)->f();

kullanılmış statik üye fonksiyonları taklit. Bu hile bir saatli bomba, çünkü er ya da geç biri olacak f() kullanılan bu yol virtual ve çağrı başarısız olacaktır, çünkü korkunç bir şekilde yok X nesne adresinde sıfır. f() sanal olmayan yerlerde bile bu tür çağrıları dinamik bazı uygulamaları bağlama altında başarısız olur.

Kodunuzu dile statik üye işlevlerin zaman farkında olan biri tarafından Cfront 1.0 altında veya derlemek için yazılmıştır.

static üye fonksiyonu açıklama gerçekten bir bulmaca gibiŞerefe ve hth. - Alfgözlenen; 1.0 Cfront ile kod reddetti olurdu:

error:  member Method() cannot be static

olamaz orada başlangıçta olmuştur. SanırımPotatoswatterbüyük ihtimalle doğru; static eklendi daha sonraki bir tarihte belge ve uygulamak statik yöntem özniteliği Method bir zamanlar bir C 2.0 derleyicisi olabilir garantili kullanılabilir, ama olmadan telefon kodu güncellendiği. Orijinal programcı(ler) mülakat ya da en azından kaynak denetimi geçmişe ait (varsa) incelemek lazım bu onaylayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Microsoft Help & Training Videos

    Microsoft He

    31 Mart 2009
  • My Name Is Jeff

    My Name Is J

    26 ŞUBAT 2008
  • SoundHound

    SoundHound

    8 Mart 2006