总结:nullptr
转换为bool
和bool
转换为int
,那么为什么不nullptr
转换为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)中。 –