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çinoperator void*
mu arıyoruz? Bazıları bunu anlamadığım en iyi duruma getiriyor mu?
Ya ben aslında
void*
bu karşılaştırmadabool
daha iyi bir eşleşme olduğunu düşündüğünü belirtti C++ da tamamen yanlış mıyım?
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
Ancak, ifstream aslında operatör void'i çağırıyor * ve operatör değil! =. – Default