2012-04-27 18 views
7

Utworzono funkcję, która akceptuje wskaźnik funkcji, np.Czy można bezpiecznie przypisać wartość nullptr do zmiennej wskaźnika funkcji?

typedef CString(*GetLabelFunc)(const CSomeObject* const pObject); 

void DoSomething(GetLabelFunc funcGetLabel); 

Funkcja może otrzymać wskaźnik pusty i zwraca pusty łańcuch w takim przypadku. To działa perfekcyjnie w MSVC++ 2010 przy użyciu NULL i nullptr jako parametr, jak również - ale nie uważam udana kompilacja bezpieczne schronienie w takich szczególnych przypadkach ...

Teraz zastanawiałam się, czy przechodząc nullptr odpowiada za NULL wskaźniki funkcji. Powodem, dla którego pytam, jest to, że na przykład void* nie przyjmuje wskaźników funkcji (lub przynajmniej nie powinno być używane). Być może istnieje podobny powód, dla którego nullptr nie powinien być używany dla wskaźników funkcji - co oznacza, że ​​jest przeznaczony do pracy tylko z wskaźnikami obiektów?

Odpowiedz

8

Tak, wartość nullptr została określona jako możliwa do przekształcenia na wartość wskaźnika pustego dla wszystkich typów wskaźników, w tym typów wskaźników funkcji.

Patrz [conv.ptr] 4.10/1 i [basic.compound] 3.9.2/3.

Powiązane problemy