Назначение Сингулярного Итератора
«Единственный итератор»определяется как ап:
итераторы, которые не связаны ни с одной последовательностью. Нулевой указатель, а также созданный по умолчанию указатель (содержащий неопределенное значение) является единственным
Мой вопрос1 было бы:Считается ли созданный по умолчанию итератор «Сингулярным итератором»?
Во-вторых, я былсказал здесь тот:
Результаты большинства выражений не определены для единичных значений; единственными исключениями являются уничтожение итератора, который содержит единственное значение, присвоение не единственного значения итератору, который содержит единственное значение, и для итераторов, которые удовлетворяют требованиям DefaultConstructible, использование инициализатора, инициализированного значением, в качестве источника операция копирования или перемещения.
Вопрос2 является:Является ли работа с «неопределенным» результатом неопределенным поведением? Казалось бы, если бы это было правдой, это было бы неопределенным поведением:
void* foo = nullptr;
auto bar = foo;
Моя более глубокая мотивация для того, чтобы задать этот вопрос, в том случае, когда у меня есть такая структура:
struct Foo {
vector<int*>::const_iterator;
};
Я хочу знать, если это неопределенное поведение, чтобы сделать это, гдеassigned
это значение построеноFoo
объект:
Foo unasigned;
assigned = unassigned;
Если ответы на вопросы1 а также2 Если да, то, вызывая оператор присваивания по умолчанию, я ввожу неопределенное поведение :(