C++ 为什么需要std::shared\u ptr的显式构造函数接受null ptr?
下面的代码可以使用GCC4.8.1进行良好编译C++ 为什么需要std::shared\u ptr的显式构造函数接受null ptr?,c++,c++11,explicit,C++,C++11,Explicit,下面的代码可以使用GCC4.8.1进行良好编译 #include <memory> class Foo { public: explicit Foo(const std::shared_ptr<Foo>& foo) { } }; int main() { Foo foo(nullptr); } #包括 福班{ 公众: 显式Foo(const std::shared_ptr&Foo){ } }; int main(){ 富富(nu
#include <memory>
class Foo {
public:
explicit Foo(const std::shared_ptr<Foo>& foo) {
}
};
int main() {
Foo foo(nullptr);
}
#包括
福班{
公众:
显式Foo(const std::shared_ptr&Foo){
}
};
int main(){
富富(nullptr);;
}
为什么这是可能的?显式函数不应该阻止编译器隐式调用std::shared_ptr(nullptr)吗
显式函数不应该阻止编译器隐式调用std::shared_ptr(nullptr)吗
否,显式构造函数将阻止这种情况发生:
Foo foo = some_shared_ptr;
它对shared_ptr
的构造函数没有影响,因此仍然允许从nullptr
隐式转换为shared_ptr
显式函数不应该阻止编译器隐式调用std::shared_ptr(nullptr)吗
否,显式构造函数将阻止这种情况发生:
Foo foo = some_shared_ptr;
它对
shared\u ptr
的构造函数没有影响,因此仍然允许从nullptr
隐式转换到shared\u ptr
。作为注释,通用或其他模板
构造函数可以使用SFINAE执行您想要的操作。作为注释,通用或其他模板
构造函数可以使用SFINAE来完成您想要的任务。