簡體   English   中英

Gnu的reverse_iterator <Iterator> :: operator-&gt;和代理迭代器

[英]Gnu's reverse_iterator<Iterator>::operator-> and proxy iterators

我已經意識到,根據[reverse.iter.opref]中的C ++ - 14標准, reserver_iterator<Iterator>::operator->必須等效於:

return std::addressof(operator*());

而在C ++ 11( 鏈接到同一部分 )是:

return &(operator*());

std::addressof是在C ++ 11中添加的,所以,它可以在這里使用。 我認為這可能只是一個后來糾正的缺陷。

但是,GLIBCXX的反向迭代器(版本6.2.0的gcc)的實現遵循前C ++ 14定義:

// /usr/include/c++/6.2.0/bits/stl_iterator.h:174
{ return &(operator*()); }

在該句子中使用operator&允許代理迭代器重載operator& reference類型,以便在需要時為迭代器提供正確的語義。 因此,也許gcc並不認為reference將是前向迭代器案例的真正參考,因為標准要求。

gcc是否明確允許代理迭代器(它們通常可以工作)? 其他編譯器是否做同樣的事情?

std::reverse_iterator<Iterator>::operator->中的&的使用在2188中被標記為庫缺陷,並且在C ++ 14中引入了更改。

但是,這種變化並不令人滿意,因為std::reverse_iterator需要一個雙向迭代器,並且它不禁止代理指針(沒有迭代器概念禁止它)。 雖然前向迭代器的reference必須是真正的引用,但同樣不適用於pointer類型:它不需要是pointer值類型的pointer ,它可以是代理指針。

所以,還有另一個圖書館問題,仍然是開放的,沒有就如何解決這個問題達成共識: 1052 也許這個問題是因為gcc不會改變operator->的實現 - operator-> (或許他們只是忘了它)。

暫無
暫無

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

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