2013-05-02 37 views
2

我今天看到下面的代碼:將迭代器中的轉換運算符轉換爲指針是個好主意嗎?

options.push_back(&*i); 

i是一個迭代器和容器options商店指針的*i類型。得到的&*i是醜了一點,我開始懷疑:

這是個好主意,添加一個轉換操作符轉換到*i指針?

你覺得呢?

+6

我會避免它;隱式轉換通常是重載解析頭痛的原因,再加上,當目標是一個指針時,他們默默地啓用了可能對你的對象無意義的東西(比如'if(i)')。 '&*'畢竟不是那麼糟糕...... – 2013-05-02 02:26:26

+0

@ matteo-italia: 我想了很多關於這個的事情......我同意你的看法。這是一個壞主意。 – vinipsmaker 2013-05-05 17:27:40

回答

2

這並不難看,但也許是危險的:如果迭代器的來源i是動態分配的並在容器options之前被刪除,則會導致容器中存在無效指針。
如果不是,這是完全有效的代碼。爲了使其更具可讀性,你可以加括號:

options.push_back(&(*i)); 

,如果你不使用這個結構在你的代碼,我就不會在這裏使用一個轉換操作符。