2009-03-07 16 views
2

C dosya akışları ++ bir hata Sinyal:Aşağıdaki örnek var

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
    ifstream file; 
    cout << file << endl;   // 0xbffff3e4 
    file.open("no such file"); 
    cout << file << endl;   // 0 
    cout << (file == NULL) << endl; // 1 
    cout << file.fail() << endl; // 1 
} 

dosya NULL ise, nasıl mümkündür fail üye işlevi çağırmak için? C++ ile aşina değilim, bu normal davranış mı? Burada neyi yanlış anlayacağım?

cevap

3

dosya bir nesnedir - bu boş olamaz. Bununla birlikte, eğer ifstream, dosya kötü bir durumda olduğunda 0 döndüren bir operatör void *() yüklemesine sahiptir. Eğer (örneğin) derken:

cout << file << endl; 

derleyici bu dönüştürür:

cout << file.operator void*() << endl; 

Bu dönüşüm yerlerde her türlü kullanılacaktır - temelde her yerde işaretçi veya tamsayı türü kullanılabileceği .

(file == NULL) 

NULL ile operatör void * tarafından döndürülen sıfır() sıfır karşılaştırmak ve

+0

Ah. Ve olay, sahnenin ardında gizli bir çok büyünün olup olmadığını görmek için statik * 'i geçersiz kılmayı denedim! Görünüşe göre beklenenden daha fazla büyü vardı. Teşekkür ederim. – zoul

0

deneyin file.good() veya bool dosyayı döküm:

file.open("no such file"); 
if (file) 
    cout << "Open OK" << endl; 
else 
    cout << "Open FAILED" << endl; 
+0

1. Teşekkür alırım ama dönüş değeri denetlemek için çalışmıyorum: Bu kullanıldığında derken. Diğer dillerde alışılmadık olan bir null nesnesinde bir işlevi çağırıyor gibi göründüğüm gerçeğini merak ediyorum. – zoul

İlgili konular