2012-04-27 69 views
7

我創建了一個接受函數指針的函數,例如將nullptr分配給函數指針變量是否安全?

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

void DoSomething(GetLabelFunc funcGetLabel); 

該函數可能會收到一個空指針,並會在這種情況下返回一個空字符串。但我不認爲一個成功的彙編在這種特殊情況下,一個安全的港灣......

現在我想知道,如果通過nullptr相當於NULL的 - 使用NULL和nullptr作爲參數時,以及該作品在MSVC++ 2010完全正常函數指針。我問的原因是,例如void*不接受函數指針(或至少它不應該使用)。所以也許有類似的理由,nullptr不應該用於函數指針 - 這意味着它只能用於對象指針嗎?

回答

8

是的,nullptr被指定爲可轉換爲所有指針類型的空指針值,包括函數指針類型。

請參閱[conv.ptr] 4.10/1和[basic.compound] 3.9.2/3。

相關問題