C++初始化具有 int 0 问题的unique_ptr



环境:C++11/14 和 MacOS Clion

首先,我知道用nullptr而不是int: 0构造一个unique_ptr更好,但我只是想知道是什么导致了以下两个编译结果:

// compile just fine
class MyClass {};
void MyFunc(unique_ptr<MyClass>) {
}
int main() {
MyFunc(0);
return 0;
}
// compile error
class MyClass {};
void MyFunc(unique_ptr<MyClass>) {
}
int main() {
MyFunc(int(0));
return 0;
}

后者有错误:

注意:候选函数不可行:第一个参数没有从"int"到"unique_ptr"的已知转换

在检查了unique_ptr的构造函数后,我发现以下是一个坦率

constexpr unique_ptr( nullptr_t ) noexcept;

所以我进一步尝试:

// good
int main() {
nullptr_t mynullptr(0);
return 0;
}

另一方面:

// error
int main() {
nullptr_t mynullptr(int(0));
return 0;
}

带消息:

错误:无法使用类型为"int"的右值初始化类型为"std::nullptr_t"(也称为"nullptr_t"(的变量

nullptr_t mynullptr(int(0((;

那么是因为nullptr的初始化导致了编译错误吗?

归功于 M.M. 的评论:

文字 0 可以转换为 nullptr ;其他整数表达式不能(即使它们是常量且值为零(

最新更新