相关疑难解决方法(0)

返回指向 const 对象的 const 共享指针的 const 向量

给出以下基于共享指针容器的类,

\n\n
class Foo;\n\nclass Bar {\npublic:\n  // ...\n  const std::vector<boost::shared_ptr<const Foo> >& getFoos() const { return foos_; }\nprivate:\n  std::vector<boost::shared_ptr<Foo> > foos_;\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不会编译,因为

\n\n
invalid initialization of reference of type \xe2\x80\x98const std::vector<boost::shared_ptr<const Foo>, std::allocator<boost::shared_ptr<const Foo> > >&\xe2\x80\x99 from expression of type \xe2\x80\x98const std::vector<boost::shared_ptr<Foo>, std::allocator<boost::shared_ptr<Foo> > >\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

foos_成员需要指向可变Foo对象以供Bar对象内部使用,但我不希望客户端代码调用getFoos()能够修改任何内容。

\n\n

const从返回类型Foo中删除限定符getFoos()可以解决此问题。但是,我知道虽然std::vector将其常量传播到其元素,但boost::shared_ptr对其指向的对象(自然)没有这样做。因此,在我看来,似乎getFoos()不再观察它的const限定符(即使编译器没有抱怨),因为客户端代码可以修改Foo返回的共享指针指向的对象。

\n\n

我对么?如果是这样,是否有某种方法可以编写getFoos(),以便它返回 const 对象的 const …

c++ stl constants shared-ptr

5
推荐指数
1
解决办法
2493
查看次数

标签 统计

c++ ×1

constants ×1

shared-ptr ×1

stl ×1