我可以使用nullptr
关键字作为变量函数的参数吗?如果是这样,它是否经历任何类型的标准转换,结果值的类型是什么?
具体而言,以下是否正确?
std::printf("%p", nullptr);
或者必须是:
std::printf("%p", static_cast<void *>(nullptr));
答案 0 :(得分:22)
§5.2.2p7当给定参数没有参数时,参数的传递方式使得接收函数可以通过调用
va_arg
来获取参数的值(18.10)...具有(可能是cv限定的)类型std::nullptr_t
的参数将转换为类型void*
(4.10)......
答案 1 :(得分:11)
标准规定,匹配nullptr_t
时,void*
类型的任何参数都将转换为...
。所以没有演员阵容,调用是正确的。
编辑:
从标准(§5.2.2/ 7):
当给定参数没有参数时,参数为 通过接收功能可以获得的方式传递 调用
va_arg
的参数值。该 左值到右值,数组到指针和函数到指针 标准转换是在参数表达式上执行的。 具有(可能是cv-qualified)类型的参数std::nullptr_t
已转换为void*
类型。