SORU
28 Kasım 2009, CUMARTESİ


Neden C -> arasında bir ayrım var mı?

TAMAM, bu ciddi bir sonucu, ama bir de beni rahatsız ediyor süre: -> . operatörler arasında ayrım için bir sebep var mı?

Tabii ki, mevcut kuralı . bir yapı üzerinde hareket eder ve -> birlikte iş görür yani işaretçi için bir yapı (ya da Birliği). Ama burada pratikte işler böyle yürüyor. s bir yapı, bir öğe x dahil olalım ve ps aynı biçimde bir yapı için bir işaretçi olalım.

Eğer yazarsanız

s->x

derleyici bu şekilde bir uyarı tükürdü

S demek istedin.x. Bu yeniden ve yeniden lütfen.

Eğer yazarsanız

ps.x

derleyici bu şekilde bir uyarı tükürdü

Ps -^ demek istedin . x. Bu yeniden ve yeniden lütfen.

Derleyici derleme zamanında s ps Her iki türünü bildiği için, doğru operatör ne olacağını yorumlamak için gerekli bütün bilgiler var. Doğru düzeltme konusunda belirsizlik yok bu diğer uyarılar (eksik noktalı virgül gibi) gibi değil sanırım.

Burada C1x standartları Komitesi (asla ISO muhafazakar bir çizgi üzerinde olduğu için düşünülebilir) varsayımsal bir öneri:

İfade belirtin verildi.eğer belirtin yapı veya birlik türü ise oluşturduğu,, sonra ifadeyi belirtin oluşturduğu adında bir unsuru ifade eder. Eğer belirtin türü-yapı işaretçi veya sendika ise, o zaman bu olacaktır (*belirtin) olarak yorumlanır.oluşturduğu.

Bu tabi ki bizi kurtaracak tüm zaman ve kolaylaştırmak için insanlar öğrenmek C [ve öğrettiğim yeterince C ile makam öğrenenler bul -> şey ya kafa karıştırıcı ya da sinir bozucu.]

Hatta C benzer bir şeyim yok emsal karar var. E. g., uygulama sebep, işlev bildirimleri her zaman oyuncular için pointer-to-function, yani f(x,y) (*f)(x,y) her ikisi de işe bakılmaksızın f ilan edildi gibi bir işlevi ya da bir işaretçi işlevi.

Bu önerinin nesi var? yani, benim soru: ps.x ve zorunlu ayrım tutmak aksi takdirde yararlıdır neden s.x ya arasında önemli bir belirsizlik olacak örnekler düşünebiliyor musunuz?

CEVAP
28 Kasım 2009, CUMARTESİ


Bir şey söyledim ne kadar deli olduğunu sanmıyorum. Yapılar için işaretçiler için . kullanarak çalışacak.

Ancak, yapılar ve yapılar için işaretçiler farklı muamele olduğu gerçeğini seviyorum.

Pahalı olabilir ne gibi işlemler ve ipuçları hakkında biraz bilgi kaynağı oluşturur.

Bu parçacık düşünün, oldukça büyük bir işlev ortasında olduğunu hayal edin.

s.c = 99;
f(s);

assert(s.c == 99);

Şu anda s bir yapı olduğunu söyleyebilirim. Ara 23 ** için bütünüyle kopyalanmış olacak biliyorum. Ben de iddiaolamazateş.

Eğer kullanma . işaretçiler yapı vardı izin vermezdim biliyor ve iddia olabilir ateş, f olabilir s.c (err s->c) başka bir şey.

Diğer dezavantajı C ile uyumluluk azaltmak olduğunu ifade etti . C -> sınıflar böylece sınıflar '' işaretçiler. tarafından aşırı sağlar . -> farklı davranır çok önemli. "Yeni" yapılar için işaretçiler . kullanılan C kodu muhtemelen C kodu olarak kabul edilebilir herhangi bir daha fazla olurdu.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012