Próbowałem program testowy na niepowodzenie otwierania pliku przy użyciu ifstream
. Kod jest poniżej: -C++ Obiekt ifstream jest równy nullptr, ale nie jest wskaźnikiem?
#include <iostream>
#include <fstream>
#include <type_traits>
using namespace std;
int main()
{
ifstream ifs ("wrong_filename.txt");
cout << boolalpha;
cout << is_pointer<decltype(ifs)>::value <<"\n";
cout << (ifs==nullptr);
return 0;
}
wyjściowa wynosi: -
false
true
Jeśli ifs
nie jest pointer
, to w jaki sposób to robi równe nullptr
?
Występuje przeciążenie obsady dla 'void *' IIRC. –
Dowolny typ klasy może wybrać porównywalność z 'nullptr', definiując niejawną konwersję na typ wskaźnika, lub odpowiednio przeciążając' operator == '. –
Nazwij kompilator, pytając o "wątpliwości". –