我有一个 vector 作为类中的成员,我想通过 getVector() 函数返回对它的引用,以便以后能够修改它。将函数 getVector() 设置为 const 不是更好吗?但是,我在下面的代码中收到错误“限定符在类型的绑定(bind)引用中删除...”。应该修改什么?
class VectorHolder
{
public:
VectorHolder(const std::vector<int>&);
std::vector<int>& getVector() const;
private:
std::vector<int> myVector;
};
std::vector<int> &VectorHolder::getVector() const
{
return myVector;
}
最佳答案
由于是const
成员函数,返回类型不能是非常量引用。使它成为 const
:
const std::vector<int> &VectorHolder::getVector() const
{
return myVector;
}
现在好了。
为什么没问题?因为在一个 const
成员函数中,每个成员都变成 const 以一种不能被修改的方式,这意味着 myVector
是一个 const
函数中的 vector ,这就是为什么如果它返回 reference,你也必须将返回类型设为 const
。
现在你不能修改相同的对象。看看你能做什么,不能做什么:
std::vector<int> & a = x.getVector(); //error - at compile time!
const std::vector<int> & a = x.getVector(); //ok
a.push_back(10); //error - at compile time!
std::vector<int> a = x.getVector(); //ok
a.push_back(10); //ok
顺便说一句,我想知道你为什么首先需要这样的 VectorHolder
。
关于c++ - 返回对 vector 成员变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384234/