2010-11-28 23 views
8

this question yanıt verirken, beni gerçekten şaşırtan bazı araştırmalar yaptım.operatörü önceliği (bool'den önce void *)

Başarılı bir şekilde açılmış olan iki ifstyonun eşit olmadığını, ancak başarısız olan iki ifstream olduğunu fark ettim. İlk başta cplusplus.com'u kontrol ettim. operator !, badbit ve failbit durumlarını döndürür. Bunun tersinin yine de bu iki bitin statüsünü döndürmek olduğunu, ancak ters çevrildiğini düşünüyorum. yanlış

  • , iki başarılı aramalar eşit değildir, çünkü.

Sonra bir şey döndüren bir yere bir operator bool olduğunu düşündüm. Bu nedenle, geri çekilmeyi denedim ve _Ok döndüren istream::operator bool()'u buldum.

  • Yine yanlış ancak
    , bu hiç çağrılacak görünmüyor (ve iki başarılı aramalar hala eşit değildir, çünkü olamazdı).

Bu yüzden yaklaşımımı değiştirdim ve Visual Studio'dan sökme işlemini kontrol ettim. Ve ne bulabilirim?
if (file0 != file1) { çağırmaz operator bool(), ziyade operator void*() (veya gerçekten __imp_std::ios_base::operator void *).

Yani

  • herhangi operator bool() işaretçi değerlere bunu döküm denemeden önce çağrılmalıdır bulundu olmamalı ben vardır gereken sorular ..?
  • Bazıları operator bool() mu? Bunu cevaplamak için operator void* mu arıyoruz?
  • Bazıları bunu anlamadığım en iyi duruma getiriyor mu?

  • Ya ben aslında void* bu karşılaştırmada bool daha iyi bir eşleşme olduğunu düşündüğünü belirtti C++ da tamamen yanlış mıyım?

cevap

2

1.) Birden çok kez ancak farklı dönüş türleriyle aşırı yükleyemezsiniz. 2.) Evet, operator!, badbit/failbit değerini döndürür, ancak operator!, kullandığınız olan operator!='dan tamamen farklı bir şeydir.

+0

Ah, evet .. Anlıyorum. Teşekkürler, burada yoruldum hissediyorum. Bu konuda bir takip sorumlum var :) Belki de [bu bir] cevabı (http://stackoverflow.com/q/4294873/238902 "hem operatör void * hem de operatör bool") tanımlayabilirsiniz ..? – Default

+0

Ancak, ifstream aslında operatör void'i çağırıyor * ve operatör değil! =. – Default

İlgili konular