C++ Const方法向向量元素返回非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
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]);