Const 方法返回对向量元素的非常量引用
Const method returning non-const reference to vector element
我很难弄清楚如何从 const class 方法 return 对 std::vector
中元素的 non-const
引用。我想要的一个简单例子是,
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)
Eigen 给出了相同类型的行为,但我一直无法弄清楚如何让它工作。
您可以使用 const_cast
,它会在这里完成工作(根据张贴的用法)。但是在这种情况下(以及大多数情况下)您不需要它。
您可以(并且应该)为其添加非常量成员函数重载。然后const成员函数returns引用const,non-const成员函数returns引用non-const。将通过 overload resolution.
调用适当的一个
const T& x() const
{
return myVec[0];
}
T& x()
{
return myVec[0];
}
标准库容器将容器的常量性扩展到值本身。由于您的 class 在 x()
中是常数,向量也是。您可以使用 const_cast 从访问器中的项目中删除 const
。
return const_cast <T&> (*(myVec.data())[0]);
一般来说,这被认为是不好的做法,因为 const
是为了保护你。绕过这些保护会使代码更难推理。
我很难弄清楚如何从 const class 方法 return 对 std::vector
中元素的 non-const
引用。我想要的一个简单例子是,
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)
Eigen 给出了相同类型的行为,但我一直无法弄清楚如何让它工作。
您可以使用 const_cast
,它会在这里完成工作(根据张贴的用法)。但是在这种情况下(以及大多数情况下)您不需要它。
您可以(并且应该)为其添加非常量成员函数重载。然后const成员函数returns引用const,non-const成员函数returns引用non-const。将通过 overload resolution.
调用适当的一个const T& x() const
{
return myVec[0];
}
T& x()
{
return myVec[0];
}
标准库容器将容器的常量性扩展到值本身。由于您的 class 在 x()
中是常数,向量也是。您可以使用 const_cast 从访问器中的项目中删除 const
。
return const_cast <T&> (*(myVec.data())[0]);
一般来说,这被认为是不好的做法,因为 const
是为了保护你。绕过这些保护会使代码更难推理。