gpt4 book ai didi

c++ - 如果我删除了 const,为什么这个使用 boost::shared_ptr 的调用不能在 C++ 中编译?

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

#include <boost/smart_ptr.hpp>

class Base {
};

class Derived : public Base {
public:
Derived() : Base() {}
};

void func(/*const*/ boost::shared_ptr<Base>& obj) {
}

int main() {
boost::shared_ptr<Base> b;
boost::shared_ptr<Derived> d;
func(b);
func(d);
}

这会使用 func 签名中的 const 进行编译,但并非没有它。错误出现在调用 func(d);

的行中

对我有什么提示吗?

最佳答案

阅读 documentation of boost::shared_ptr 时我们发现以下内容:

A shared_ptr<T> can be implicitly converted to shared_ptr<U> whenever T* can be implicitly converted to U*.


这意味着boost::shared_ptr<Derived>可隐式转换为 boost::shared_ptr<Base> 类型的对象.

执行 func (d) 时发生此转换虽然非常量引用不能绑定(bind)到临时对象,但将创建一个临时对象——这就是为什么你的编译器会发出错误,除非你将参数设为func。一个const& .

关于c++ - 如果我删除了 const,为什么这个使用 boost::shared_ptr 的调用不能在 C++ 中编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11080161/

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