2012-04-27 13 views
7

Ich habe eine Funktion erstellt, die einen Funktionszeiger akzeptiert, z.Ist es sicher, nullptr einer Funktionszeigervariablen zuzuordnen?

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

void DoSomething(GetLabelFunc funcGetLabel); 

Die Funktion empfängt möglicherweise einen Nullzeiger und gibt in diesem Fall eine leere Zeichenfolge zurück. Das funktioniert völlig in Ordnung in MSVC++ 2010, als auch NULL und nullptr als Parameter verwendet wird - aber ich weiß nicht eine erfolgreiche Compilation ein sicherer Hafen in einem solchen besonderen Fällen betrachten ...

Jetzt fragte ich mich, ob nullptr vorbei gleichwertig ist NULL für Funktionszeiger. Der Grund, warum ich frage ist, dass zum Beispiel void* keine Funktionszeiger akzeptiert (oder es sollte zumindest nicht verwendet werden). Vielleicht gibt es einen ähnlichen Grund, dass nullptr nicht für Funktionszeiger verwendet werden sollte - was bedeutet, dass er nur für Objektzeiger gedacht ist?

Antwort

8

Ja, nullptr ist so festgelegt, dass er für alle Zeigertypen, einschließlich der Funktionszeigertypen, in den Nullzeigerwert konvertiert werden kann.

Siehe [conv.ptr] 4.10/1 und [basic.compound] 3.9.2/3.

Verwandte Themen