C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用

Posted

技术标签:

【中文标题】C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用【英文标题】:C++, Member function returning const reference to vector containing pointers to const objects 【发布时间】:2013-04-21 17:38:58 【问题描述】:

我有一个带有指向对象的成员向量的类。现在我想要一个访问器方法来返回对该向量的 const 引用。我还希望调用者方法无法编辑向量指针指向的对象,即指针应该指向 const 对象。这是我的错误代码:

class Foo

private:
    vector<Foo*> myFoos;
public:
    const vector<const Foo*> &getMyFoos(void)
    
        return myFoos; //Doesn't work since vector<Foo*> cannot be cast to vector<const Foo*>
    

我已经看到了类似问题的答案,其中解决方案是制作向量 myFoos 的副本,其中副本的类型正确。由于 myFoos 向量可能非常大,是否可以在不复制的情况下执行此操作?

【问题讨论】:

如果结果仅在短时间内使用,则可以返回 static_cast&lt;Foo const *&gt;(myFoos.data()),然后再对向量进行变异... 返回一对常量迭代器开始和结束。在 C++11 中教 for 如何迭代它。 @H2CO3:然后您将const Foo 添加到您的演员表vector,然后再通过原始vector 访问它并尝试更改它... BOOM。 或者使用类型来包装指针,其中operator*operator-&gt; 有足够的const 版本。 添加一个方法来访问对象,而不是向量:Foo const* getFoo(size_t i) const return myFoos[i]; -- 也是一个获取大小的方法。如果您的指针不能为空,请改为返回引用。 【参考方案1】:

只需将 operator[] const 添加到您的 Foo 类中:

const Foo& operator[] (size_t i) const 
    // you may add some range checking here
    return *myFoos[i];

【讨论】:

以上是关于C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用的主要内容,如果未能解决你的问题,请参考以下文章

C++ _ const的用法,特别是用在函数前面与后面的区别!

测试页面

C++类中的常成员和静态成员

C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针

在 const 成员函数中返回 C++ 引用

c++ const修饰成员函数