użyłem stwierdzenia takie jak to całkiem sporo w moim C++ Programowanie:Dlaczego działa (std :: ifstream >> s)?
std::string s;
std::ifstream in("my_input.txt");
if(!in) {
std::cerr << "File not opened" << std::endl;
exit(1);
}
while(in >> s) {
// Do something with s
}
Co chcę wiedzieć, dlaczego to działa?
Spojrzałem na wartość zwracaną przez operator>>
, a jest to obiekt istream
, a nie boolowski. W jaki sposób obiekt istream jest w jakiś sposób interpretowany jako wartość bool, którą można umieścić w instrukcjach if
i pętlach?
Nie musi to być * bool' musi mieć * niejawną konwersję * na 'bool'. Na przykład dowolne z poniższych to "falsy": '0',' nullptr', '0x0',' false', itp. – CoryKramer
Hmm, widzę. Jak określić, które klasy mają niejawną konwersję na wartość bool? – bobroxsox
Jak wspomniano o @JosephMansfield, klasa musi mieć zdefiniowane 'operator bool()'. – CoryKramer