[英]arithmetic of pointers in c++ due to allocation
我創建了一個包含3個相同類型元素的類(類似於std::pair<T,std::pair<T,T>>
)。 此外,我准備for(auto&var:t)
但我不知道我是否安全地做到了。
template <class T>
class Troika
{
public:
Troika(const T& f, const T& s, const T& t)
:first(f), second(s), third(t) {}
Troika(){}
T first;
T second;
T third;
typedef T* iterator;
typedef const T* const_iterator;
iterator begin()
{
return &first;
}
const_iterator begin() const
{
return &first;
}
iterator end()
{
return &third+1;
}
const_iterator end() const
{
return &third + 1;
}
};
我的意思是這個部分: return &third + 1;
。 我知道如果有人對c ++中的指針算法知之甚少,那真的很危險。 這些元素是否一個接一個地靠近?
這些元素是否一個接一個地靠近?
它們可能是,因為它們具有完全相同的可訪問性 。 但它仍然無法使您的實施安全。 指針算法僅對同一數組對象中的元素有效。 這三個不在同一個數組中,看不到陣列。 任何使用這些迭代器的嘗試都將導致未定義的行為。
我不確定你是否打算定義這個類,但是對於同一類型的三個元素的容器,我會提供更多的慣用語:
template<typename T>
using Troika = std::array<T, 3>;
你失去了first
, second
和third
命名成員,但獲得索引(我認為這是好的)和免費迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.