g.-*_*-o. 2 c++ const temporary shared-ptr
#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);
}
Run Code Online (Sandbox Code Playgroud)
这用func的签名中的const编译,但不是没有它.该错误出现在呼叫的行中func(d);
有什么提示吗?
阅读文档时,boost::shared_ptr我们发现以下内容:
阿
shared_ptr<T>可以隐式转换到shared_ptr<U>每当T*可以隐式转换到U*.
这意味着boost::shared_ptr<Derived>可以隐式转换为类型的对象boost::shared_ptr<Base>.
func (d)虽然非const引用不能绑定到临时对象,但在执行临时对象时会发生此转换,这就是为什么编译器发出错误的原因,除非你将参数设置为funca const&.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |