如果我为迭代器使用默认构造函数,如何检查它是否稍后被分配?
对于指针,我可以这样做:
int *p = NULL;
/// some code
if ( NULL == p ) {
// do stuff
}
如何为迭代器执行上述操作? 有可能吗?
#include <iostream>
#include <list>
int main ()
{
std::list<int>::iterator it;
if ( NULL == it ) // this fails
{
std::cout<<"do stuff" << std::endl;
}
}
最佳答案
我设法在当前标准 (c++03) 中找到了这一点。 24.1 p 5 告诉:
Just as a regular pointer to an array guarantees that there is a pointer value pointing past the last element of the array, so for any iterator type there is an iterator value that points past the last element of a corresponding container. These values are called past-the-end values. Values of an iterator i for which the expression
*i
is defined are called dereferenceable. The library never assumes that past-the-end values are dereferenceable. Iterators can also have singular values that are not associated with any container. [Example: After the declaration of an uninitialized pointerx
(as withint* x;
),x
must always be assumed to have a singular value of a pointer. ] Results of most expressions are undefined for singular values; the only exception is an assignment of a non-singular value to an iterator that holds a singular value. In this case the singular value is overwritten the same way as any other value. Dereferenceable values are always non- singular.
(强调我的)
所以答案是:不,不可能。
关于c++ - 如何检查迭代器是否已初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954949/