c++ - 返回对 vector 成员变量的引用

标签 c++ vector reference constants

我有一个 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/

相关文章:

c++ - 将参数传递给常量函数是否会在内存中复制?

c# - 空指针使用多少内存?

c++ - 更新到 MFC 功能包

c++ - 为什么 C++ 字符串分词器不工作

c++ - QTemporaryFile 为空

java - 如何打印 Vector[] 的所有值

C++ vector 冒泡排序

具有精心设计的异常机制的 C++ 项目

java - Vector 和 Vector<> 有什么区别

c++ - 了解返回字符串引用的函数中的 "const"