簡體   English   中英

由於分配導致的c ++指針算術

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

你失去了firstsecondthird命名成員,但獲得索引(我認為這是好的)和免費迭代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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