gpt4 book ai didi

c++ - 为什么必须提供 std::make_shared 类型信息而 std::make_pair 不必提供?

转载 作者:太空狗 更新时间:2023-10-29 19:48:07 24 4
gpt4 key购买 nike

例如,当我们想要创建一个 std::pair 时,我们可以简单地调用:

std::make_pair(5, "foo");

但是当我们打算创建一个 shared_ptr 时,我们必须提供类型信息:

std::make_shared<Foo>("Boo", 1024);

有什么原因使它们不同吗?

最佳答案

函数std::make_pair<T1, T2>创建一对 std::pair<T1, T2>其中类型 T1T2是函数的参数类型。因此,它们可以由编译器推导出来,通常您不需要显式提供它们。

函数std::make_shared<T>创建类型为 T 的新对象并返回 shared_ptr<T>存储这个对象。该函数将其所有参数传递给 T 的构造函数.编译器无法推断类型 T从论点。即使论点是例如const T&编译器不知道你是否想创建 shared_ptr<T>shared_ptr<SomeOtherTypeWithConstructorAcceptingT> .

关于c++ - 为什么必须提供 std::make_shared 类型信息而 std::make_pair 不必提供?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com