[英]Const method returning non-const reference to vector element
我很難弄清楚如何從const類方法返回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成員函數重載。 然后const成員函數返回對const的引用,非const成員函數返回對非const的引用。 將通過重載解析調用適當的一個。
const T& x() const
{
return myVec[0];
}
T& x()
{
return myVec[0];
}
標准庫容器將容器的常量擴展為值本身。 由於您的類在x()
是常量,因此向量也是如此。 您可以使用const_cast從訪問者中的項目中刪除const
。
return const_cast <T&> (*(myVec.data())[0]);
一般來說,這被認為是不好的做法,因為const
可以保護你。 繞過這些保護可能會使代碼難以推理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.