【发布时间】:2012-10-17 00:49:24
【问题描述】:
总结:nullptr 转换为bool,bool 转换为int,那么为什么nullptr 不转换为int?
这段代码没问题:
void f(bool);
f(nullptr); // fine, nullptr converts to bool
这没关系:
bool b;
int i(b); // fine, bool converts to int
那为什么不行呢?
void f(int);
f(nullptr); // why not convert nullptr to bool, then bool to int?
【问题讨论】:
-
您希望转换是什么?
-
编译器只会从你传递的内容到函数接受的内容进行一次隐式转换。这基本上适用于所有类型,而不仅仅是 nullptr 的。例如,如果您定义一个转换为
char的类型并尝试将其传递给一个接受int的函数,即使它支持隐式转换为char,它也会失败,并且还有一个从char到int的隐式转换。 -
@JerryCoffin 编译器通常会进行不止一次的隐式转换。它只会进行一次用户定义的转换,但它可以根据规则进行任意数量的其他转换。有一条规则,在任何给定的类别中最多可以应用一次转换,
nullptr_t到bool和bool到各种整数类型都属于“转换”类别(参见 13.2.2.1.1)。 -
我认识伯特,伯特认识汉斯,汉斯认识奥巴马。所以我认识奥巴马!
标签: c++ c++11 implicit-conversion nullptr