Rozważmy pewien kawałek kodu
int *wsk = nullptr; //cleowo nie ustawiam na coś wskaźnika
if(wsk)
{
cout << "wskaźnik NIE zawiera adresu" << endl;
}
else{
cout << "wskaźnik zawiera adres" << endl;
}
Czytałem, że wskaźnik podawany w argumencie jest niejawnie konwertowany na typ BOOL.
Teraz celowo uczepię się fragmentu kodu if(wsk)
przy tak postawionym warunku wynik mam następujący
wskaźnik NIE jest pusty
jak nie jest pusty, skoro zawiera wartość NULL, ZERO ? Natomiast gdy zrobię w ten sposób
int *wsk = nullptr; //cleowo nie ustawiam na coś wskaźnika
if(wsk == nullptr) //tutaj daję w warunku do czego ma być porównany
{
cout << "wskaźnik NIE zawiera adresu" << endl;
}
else{
cout << "wskaźnik zawiera adres" << endl;
}
wynik mam
wskaźnik jest pusty
no to teraz rozważmy dalej poniższy kod
int main()
{
int *wsk = nullptr;
int liczba;
wsk = &liczba;
if(wsk == nullptr){
cout << "wskaźnik NIE zawiera adresu" << endl;
}
else{
cout << "wskaźnik zawiera adres" << endl;
}
return 0;
}
przy powyższym kodzie wynik mam wskaźnik zawiera adres
Natomiast jak znowu nie porównam z niczym - kod poniżej
int main()
{
int *wsk = nullptr;
int liczba;
wsk = &liczba;
if(wsk){ //tutaj celowo NIC nie porównuję
cout << "wskaźnik NIE zawiera adresu" << endl;
}
else{
cout << "wskaźnik zawiera adres" << endl;
}
return 0;
}
to wynik mam wskaźnik NIE zawiera adresu
Więc na podstawie powyższych rozważań pytanie jest następujące
Skoro warunek zwraca inne wyniki, niż wynika to z teorii (czyli wskaźnik POWINIEN być NIEJAWNIE konwertowany na typ BOOL) - to jak należy rozumieć zapis
if(wsk)
? że do czego jest porównywany ? Albo, że co zwraca ? Albo ktoś wyjaśni ?
Tak poważnie, to już zgłupieć można, bo spotykam się z zapisami if(wsk)
- nie wiem co jest teraz prawdą, a co kłamstwem ? Jaka prawidłowa wartość jest zwracana ? Jak TEORETYCZNIE wskaźnik niejawnie jest konwertowany na typ BOOL, to powinien być konwertowany, a wychodzi na to, że nie jest
Wiem, że zaraz będziecie się tu nabijać itp itd... mam gdzieś ludzi głupio-mądrych, bo jak nie potrafią racjonalnie wyjaśnić prostej rzeczy, to dla mnie taki osobnik sam nie rozumie tematu i tylko bezmyślnie zakuł regułki podane w książce, a to, że jemu w robocie kod wychodzi, to już inna bajka.
Więc czytając wszystkie kursy, stanowisko powinno być jedne, spójne i nie powinno wprowadzać zamętu, a w praktyce jest zupełnie inaczej.
PS. Dla ciekawości podam, że jak jawnie ustawię if(wsk == true)
kompilator mówi mi coś takiego