簡體   English   中英

將引用返回給迭代器是一種好習慣嗎? (甚至有意義)嗎?

[英]Is it good practice to return references to iterators? (Does it even make sense)?

我不確定這是否是合法的事情-通過引用返回迭代器:

  1. vector :: iterator&getElement(const char * name){...}

請注意,我的向量僅包含元素本身而不包含指針

在當前狀態下,我已按值將其保留(不帶&)。

關於迭代器是否達成共識,或者我可以同時使用兩種方式嗎?

重點是什么? 迭代器本身就是對向量內部內容的一種引用。 您是否要給某人一個可以在內部修改的迭代器? 也就是說,向迭代器提供引用的類本身會增加它的引用(將其指向向量中的另一事物),並且客戶端以某種方式使其迭代器指向正確的對象,從而導致其之前稱為getElement()? 那是我能想到的唯一引用迭代器的應用程序,對我來說,它肯定也很難聞。

但是更重要的是,迭代器存在嚴重問題,因此可能會持續存在。 迭代器無效。 如果您的介面內部有迭代器,且向量已刪除或增加,您將無法保證客戶的迭代器仍然有效。 然后,客戶端訪問其無效的迭代器,並且發生未定義的行為(即CRASH)。

僅當迭代器被另一個對象“擁有”並且您希望調用者修改所有者的迭代器時,才通過引用返回參數才有意義。 其中有99%的時間是個壞主意。 通常,應將迭代器視為指針,並且除奇數情況外,指針幾乎總是返回/傳遞值。

暫無
暫無

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

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