gpt4 book ai didi

c++ - 将派生类的 std::shared_ptr 转换为基类的

转载 作者:行者123 更新时间:2023-11-30 05:09:21 26 4
gpt4 key购买 nike

<分区>

#include <iostream>
#include <memory>

class Base{
};
class Derive : public Base{
};

void foo(std::shared_ptr<Base>& p){
}
void bar(const std::shared_ptr<Base>& p){
}

int main(){

auto base = std::make_shared<Base>();
foo(base);
bar(base);

auto derive = std::make_shared<Derive>();
foo(derive);
bar(derive);

return 0;
}

g++ -std=c++0x test.cpp

编译器说:

test.cpp:21:5: error: no matching function for call to 'foo'
foo(derive);
^~~
test.cpp:9:6: note: candidate function not viable: no known conversion from 'std::__1::shared_ptr<Derive>' to
'std::shared_ptr<Base> &' for 1st argument
void foo(std::shared_ptr<Base>& p){

您能解释一下为什么不能将派生类的 shared_ptr 传递给 foo(),而可以将它传递给接收 shared_ptr 的 const 引用的 bar()。

抱歉我的英语不好。谢谢。

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