[英]Why can std::move_iterator advertise itself as a forward (or stronger) iterator, when it dereferences to an rvalue reference?
根據 cppreference, std::move_iterator
將其::iterator_category
設置為其底層迭代器1的類別。
但我認為它充其量只能是一個輸入/輸出迭代器,因為對於前向迭代器的reference
必須是一個左值引用,而move_iterator
將reference
(以及operator*
的返回類型)設置為一個右值引用2 。
這是一個錯誤類別的迭代器的公然錯誤標記嗎?
能夠為我自己的迭代器做到這一點無疑是很方便的。 如果即使標准庫也這樣做,我有什么理由不這樣做嗎?
1但是任何比random_access_iterator_tag
更強的東西都會被截斷為random_access_iterator_tag
,這很奇怪,因為contiguous_iterator_tag
只應該用於::iterator_concept
。
2或者如果它不是引用,則保持不變,但是底層迭代器也不應該將自己宣傳為前向迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.