Const方法返回向量元素的非const引用

时间:2016-08-05 13:20:32

标签: c++ vector reference const const-method

我很难弄清楚如何从const类方法返回non-conststd::vector元素的template<class T> class MyClass { public: MyClass : myVec(3) { } T& x() const { return *(myVec.data())[0] } std::vector<T> myVec; } 引用。我想要的一个简单例子是

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)

我所追求的行为是,我希望能够做到以下事情,

new

Eigen提供相同类型的行为,但我无法弄清楚如何让它发挥作用。

2 个答案:

答案 0 :(得分:10)

您可以使用const_cast,并在此处完成工作(根据发布的使用情况)。但是在这种情况下你并不需要它(在大多数情况下)。

你可以(而且应该)为它添加非const成员函数重载。然后const成员函数返回对const的引用,非const成员函数返回对非const的引用。相应的一个将通过overload resolution调用。

const T& x() const
{
   return myVec[0];
}
T& x()
{
   return myVec[0];
}

答案 1 :(得分:2)

标准库容器将容器的常量扩展为值本身。由于您的类在x()中是常量,因此向量也是如此。您可以使用const_cast从访问者中的项目中删除const

return const_cast <T&> (*(myVec.data())[0]);

一般来说,这被认为是不好的做法,因为const可以保护你。绕过这些保护可能会使代码难以推理。