C++ Const方法向向量元素返回非Const引用

C++ Const方法向向量元素返回非Const引用,c++,vector,reference,constants,const-method,C++,Vector,Reference,Constants,Const Method,我很难弄清楚如何从const类方法返回std::vector中元素的非const引用。我想要的一个简单的例子是 template<class T> class MyClass { public: MyClass : myVec(3) { } T& x() const { return *(myVec.data())[0] } std::vector<T> myVec; } 模板 类MyClass { 公众: MyClass:myVec

我很难弄清楚如何从const类方法返回
std::vector
中元素的
非const
引用。我想要的一个简单的例子是

template<class T>
class MyClass
{
 public:
 MyClass : myVec(3)
 {
 }

 T& x() const
 {
    return *(myVec.data())[0]
 }

 std::vector<T> myVec;
}
模板
类MyClass
{
公众:
MyClass:myVec(3)
{
}
T&x()常数
{
return*(myVec.data())[0]
}
std::载体myVec;
}
我想要的行为是,我希望能够做如下事情

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)
MyClass-obj;
obj.x()=3.3;
断言(obj.x()==3.3)
给出了相同类型的行为,但我一直不知道如何让它工作

您可以使用,它将在这里完成工作(根据发布的用法)。但在这种情况下(以及大多数情况下),您不需要它

您可以(也应该)为它添加非常量成员函数重载。然后常量成员函数返回对常量的引用,非常量成员函数返回对非常量的引用。将通过调用相应的


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

return const_cast <T&> (*(myVec.data())[0]);
返回常量转换(*(myVec.data())[0]);

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

@jlack不清楚您为什么试图返回对常量对象的非常量引用。为什么
x
const?如果你有一个变异的访问器,它不应该是常量。是否仅仅因为容器是常量,容器中的项就应该是常量是有争议的。如果我有一个由非常量指针组成的常量容器,那根本不同吗?您可以将常量视为仅适用于存在的项目,而不适用于它们的值。
return const_cast <T&> (*(myVec.data())[0]);