nullptr可以用作变量参数(varargs)吗?

时间:2013-09-11 13:18:29

标签: c++ c++11 type-conversion nullptr

我可以使用nullptr关键字作为变量函数的参数吗?如果是这样,它是否经历任何类型的标准转换,结果值的类型是什么?

具体而言,以下是否正确?

std::printf("%p", nullptr);

或者必须是:

std::printf("%p", static_cast<void *>(nullptr));

2 个答案:

答案 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*类型。