c++ - C++ 用 int 0 问题初始化一个 unique_ptr
问题描述
环境:C++11/14 和 MacOS Clion
首先,我知道构造一个 unique_ptr withnullptr
而不是 with更好int: 0
,但我只是想知道是什么导致了以下两个编译结果:
// 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
导致编译错误吗?
解决方案
归功于 MM 的评论:
文字 0 可以转换为 nullptr ;其他整数表达式可能不会(即使它们是常量并且值为零)
推荐阅读
- r - 使用 lubridate 根据日期创建因子
- azure - Azure API 管理 - 如何连同我的请求一起发送正文
- koin - org.koin.android.ext.android 中定义的 xxxClass
- google-apps-script - 无法解析谷歌应用脚本中的所有 JSON 值(尾随逗号)
- php - 连接错误:没有这样的文件或目录
- angularjs - Ionic Applow Capactor,firebase 通知警告,ITMS-90078:缺少推送通知权利需要建议
- java - 配置 gradle.build 将所有 spring boot 子项目构建成 jars
- python - 使用熊猫,如何计算每行中的列数?
- ruby-on-rails - 使用 Postgres 的 Rails 应用程序中的连接池错误
- python - Tensorflow 2.0:相当于 numpy. take_along_axis