“单一迭代器”定义为:
不与任何序列关联的迭代器。空指针以及默认构造的指针(保存不确定值)是单数
我的问题1是:默认构造的迭代器是否被视为“单一迭代器”?
其次,我在这里被告知:
大多数表达式的结果对于奇异值是未定义的;唯一的例外是销毁包含奇异值的迭代器,将非奇异值分配给包含奇异值的迭代器,并且对于满足 DefaultConstructible 要求的迭代器,使用值初始化的迭代器作为复制或移动操作。
问题2是:使用“未定义”的结果是否构成未定义行为?如果这是真的,这似乎是未定义的行为:
void* foo = nullptr;
auto bar = foo;
但它运行良好。
我提出这个问题的更深层动机是在我有这样一个结构的情况下:
struct Foo {
vector<int*>::const_iterator;
};
我想知道这样做是否是未定义的行为,assigned
值构造Foo
对象在哪里:
Foo unasigned;
assigned = unassigned;
如果问题1和2的答案是“是”,那么通过调用默认赋值运算符,我将引入未定义的行为 :(