C++ 异常规范和std输入迭代器
我有一个输入迭代器,它使用两个方法getFirst和getNext。这两个函数都是api的一部分,从理论上讲,无论出于何种原因,这些函数的操作都可能失败。在本例中,我将抛出一个运行时异常 我以前从未使用过C++中的异常规范,但现在思考可能是一个很好的开始时间。因此,我的构造函数和运算符++函数可以指定它们可以引发运行时错误 然后我在vector.h文件(std::vector)中进行了快速搜索,但我没有看到在那里使用throw。为什么 如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应该有异常 如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应该有异常 是的,那是个错误C++ 异常规范和std输入迭代器,c++,C++,我有一个输入迭代器,它使用两个方法getFirst和getNext。这两个函数都是api的一部分,从理论上讲,无论出于何种原因,这些函数的操作都可能失败。在本例中,我将抛出一个运行时异常 我以前从未使用过C++中的异常规范,但现在思考可能是一个很好的开始时间。因此,我的构造函数和运算符++函数可以指定它们可以引发运行时错误 然后我在vector.h文件(std::vector)中进行了快速搜索,但我没有看到在那里使用throw。为什么 如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应
关于异常规范最好指定方法不抛出的时间。而不是相反。看看问题。迭代器实际上无法知道它何时到达容器的末尾,因为STL迭代器不知道它们指向的容器 因此,由于访问无效内存,尝试递增它并取消引用它“可能”抛出,但无法知道下一个索引是否有效。不,现在不是开始的好时机。从C++11开始,动态异常规范就被弃用了,因此开始使用它们的最佳时机是“永不”。迭代器可以获得这些知识。它们可以保留一个指向容器的指针,事实上,有些实现是在调试模式下这样做的。