2012-04-27 12 views
7

Creé una función que acepta un puntero de función, p. Ej.¿Es seguro asignar nullptr a una variable de puntero de función?

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

void DoSomething(GetLabelFunc funcGetLabel); 

La función puede recibir un puntero nulo y devolverá una cadena vacía en ese caso. Esto funciona perfectamente bien en MSVC++ 2010 cuando se utiliza NULL y nullptr como parámetro, así - pero no considero una compilación con éxito un puerto seguro en estos casos especiales ...

Ahora me preguntaba si pasando nullptr es equivalente a NULL de punteros de función. La razón por la que pregunto es que, por ejemplo, void* no acepta punteros a las funciones (o al menos no debería usarse). Entonces, tal vez haya una razón similar para que nullptr no se use para punteros a funciones, es decir, ¿está diseñado para funcionar únicamente con punteros a objetos?

Respuesta

8

Sí, se especifica que nullptr es convertible al valor del puntero nulo para todos los tipos de punteros, incluidos los tipos de punteros de función.

Ver [conv.ptr] 4.10/1 y [basic.compound] 3.9.2/3.

Cuestiones relacionadas