In C++, c'è un caso in cui std::ifstream open()
può avere successo, ma std::ifstream good()
può essere falso?Aperto con successo ma non buono?
EDIT: provato con g ++ 4.7.1
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
std::ifstream filestream("testfile");
std::cout<<filestream.good()<<std::endl;
std::cout<<filestream.eof()<<std::endl;
std::cout<<filestream.fail()<<std::endl;
std::cout<<filestream.bad()<<std::endl;
return 0;
}
tornerà: 1, 0, 0, 0 per un file vuoto che significa good = TRUE
e eof = fail = bad = FALSE
. È normale ?
+1 l'implementazione potrebbe effettivamente non testare il file finché non si tenta una lettura e quella lettura non riesce. –
@ DavidRodríguez-dribeas In generale, non ha senso testare 'eofbit' finché un input non ha avuto esito positivo. E il fatto che 'std :: ifstream :: good()' testa l''eofbit' (oltre agli altri bit di stato) lo rende praticamente inutile. –
Non penso ci sia alcun * danno * nell'interrogante usando 'buono' c'è? È solo che dal momento che il 'eofbit' non è impostato, si potrebbe anche testare il flusso per la verità come normale. Suppongo che ci sia un danno di leggibilità nel fare qualcosa di inutilmente anormale, e come dici tu praticamente qualsiasi uso di 'buono' è inutilmente anormale ... –