簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM