20

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

具体来说,以下是否正确?

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

或者它必须是:

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

2 回答 2

22

§5.2.2p7当给定参数没有参数时,参数的传递方式使得接收函数可以通过调用va_arg(18.10) 来获取参数的值... ) 类型std::nullptr_t转换为类型void*(4.10)...

于 2013-09-11T13:23:20.850 回答
11

该标准说,任何类型的参数都nullptr_tvoid*在匹配时转换为...。因此,没有演员表的调用是正确的。

编辑:

从标准(§5.2.2/7):

当给定参数没有参数时,参数以这样一种方式传递,即接收函数可以通过调用来获取参数的值va_arg。对参数表达式执行左值到右值、数组到指针和函数到指针的标准转换。具有(可能是 cv 限定的)类型的参数 std::nullptr_t被转换为 type void*

于 2013-09-11T13:22:39.023 回答