Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 异常规范和std输入迭代器_C++ - Fatal编程技术网

C++ 异常规范和std输入迭代器

C++ 异常规范和std输入迭代器,c++,C++,我有一个输入迭代器,它使用两个方法getFirst和getNext。这两个函数都是api的一部分,从理论上讲,无论出于何种原因,这些函数的操作都可能失败。在本例中,我将抛出一个运行时异常 我以前从未使用过C++中的异常规范,但现在思考可能是一个很好的开始时间。因此,我的构造函数和运算符++函数可以指定它们可以引发运行时错误 然后我在vector.h文件(std::vector)中进行了快速搜索,但我没有看到在那里使用throw。为什么 如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应

我有一个输入迭代器,它使用两个方法getFirst和getNext。这两个函数都是api的一部分,从理论上讲,无论出于何种原因,这些函数的操作都可能失败。在本例中,我将抛出一个运行时异常

我以前从未使用过C++中的异常规范,但现在思考可能是一个很好的开始时间。因此,我的构造函数和运算符++函数可以指定它们可以引发运行时错误

然后我在vector.h文件(std::vector)中进行了快速搜索,但我没有看到在那里使用throw。为什么

如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应该有异常

如果我已经到达迭代器的末尾,并且我做到了*(I++),是否应该有异常

是的,那是个错误


关于异常规范最好指定方法不抛出的时间。而不是相反。看看问题。

迭代器实际上无法知道它何时到达容器的末尾,因为STL迭代器不知道它们指向的容器

因此,由于访问无效内存,尝试递增它并取消引用它“可能”抛出,但无法知道下一个索引是否有效。

不,现在不是开始的好时机。从C++11开始,动态异常规范就被弃用了,因此开始使用它们的最佳时机是“永不”。迭代器可以获得这些知识。它们可以保留一个指向容器的指针,事实上,有些实现是在调试模式下这样做的。