2012-06-29 53 views
0

我有一個輸入迭代器,它使用兩個方法getFirst和getNext。這兩個函數都是api的一部分,理論上這些函數無論出於何種原因都可能會失敗。在這種情況下,我正在施放運行時異常。異常規格和標準輸入迭代器

我從來沒有在C++中使用過異常規範,但現在想可能是開始的好時機。所以我的構造函數和operator ++函數可以指定它們可以拋出運行時錯誤。

然後我在我的vector.h文件(std :: vector)中做了一個快速搜索,但是我沒有看到在那裏使用了throw。怎麼來的?

如果我已經達到我的迭代器的末尾,並且我*(i ++)應該有異常嗎?

+3

不,現在不會是開始的好時機。動態異常規範在C++ 11以前不推薦使用,所以開始使用它們的好時機將是「從不」。 –

回答

2

如果我已經達到我的迭代器的末尾,並且我*(i ++)應該有異常嗎?

是的,這是一個錯誤。

關於異常規範,更好地指定您的方法何時不拋出。而不是相反。看看this的問題。

0

迭代器實際上無法知道它何時到達容器的末端,因爲STL迭代器不知道它們指向的容器。

所以試圖增加它並取消引用「可能」因訪問無效內存而拋出,但無法知道下一個索引是否有效。

+0

迭代器* *可以被賦予該知識。他們可以保留一個指向其容器的指針,事實上,有些實現可以在調試模式下實現。 –