![](/img/trans.png)
[英]non-const lvalue reference type _normal_iterator<> cannot bind a temporary of type _normal iterator in gcc
[英]Non-const reference type with STL-conforming const Iterator?
我正在編寫一個類,該類本質上為其他一些數據提供了靈活的接口。 我想使用符合STL的迭代器來遍歷元素,而使用boost::iterator_facade
可以使我boost::iterator_facade
正軌,但是我對符合性有疑問,我似乎找不到官方的答案。
我是否必須提供用於STL一致性的常量迭代器?
我使用std::shared_ptr<T>&
作為迭代器提供的非常量解引用類型。 如果我確實提供了const迭代器,那么為我的取消引用類型提供std::shared_ptr<T>&
而不是std::shared_ptr<const T>&
嗎?
我感覺這兩者的答案是否定的,但是我找不到能證實/使那些懷疑無效的官方消息。 我認為第二個問題更多是語義問題。
您可以決定const
應該達到的范圍。
標准方法是,在const_iterator
返回的元素上(可能是通過引用)加一個const
。 這就是標准庫的功能。
因此,如果標准迭代器的返回類型為std::shared_ptr<T>&
,則常量迭代器的返回類型應為const std::shared_ptr<T>&
。
順便說一句:您是否閱讀了標准的描述迭代器要求的部分,例如:
Random Access -> Bidirectional -> Forward -> Input
Output
完整的容器接口提供了常量迭代器和非常量迭代器。
如果您將自己限制在那些不會嘗試獲取常量迭代器的算法上,則可以省略它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.