c++ - not - ¿Se puede usar nullptr como un argumento variable(varargs)?
nullptr vs null (2)
¿Puedo usar la palabra clave nullptr
como argumento para una función de variable? Si es así, ¿experimenta algún tipo de conversión estándar y cuál es el tipo del valor resultante?
Concretamente, ¿es correcto lo siguiente?
std::printf("%p", nullptr);
O tiene que ser:
std::printf("%p", static_cast<void *>(nullptr));
§5.2.2p7 Cuando no hay un parámetro para un argumento dado, el argumento se pasa de tal manera que la función receptora puede obtener el valor del argumento invocando
va_arg
(18.10) ... Un argumento que tiene (posiblemente cv- calificado) typestd::nullptr_t
se convierte al tipovoid*
(4.10) ...
El estándar dice que cualquier argumento de tipo nullptr_t
se convertirá a void*
cuando coincida ...
Así que la convocatoria es correcta sin el elenco.
EDITAR:
De la norma (§5.2.2 / 7):
Cuando no hay un parámetro para un argumento dado, el argumento se pasa de tal manera que la función receptora puede obtener el valor del argumento invocando
va_arg
. Las conversiones estándar lvalue-to-rvalue, array-to-pointer y function-to-pointer se realizan en la expresión de argumento. Un argumento que tiene (posiblemente cv-calificado) tipostd::nullptr_t
se convierte en el tipovoid*
.