Сравнение двух пролетов, указывающих на тот же контейнер хорошо определен?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сравнение двух пролетов, указывающих на тот же контейнер хорошо определен?

Сообщение Anonymous »

Является ли сравнение begin () и end () итераторы двух std :: span s, которые указывают на одну и ту же память, четко определенную?

Код: Выделить всё

#include 
#include 

int main() {
int arr[5]{1,2,3,4,5};
std::span s1{arr};
std::span s2{arr};
assert(s1.begin() == s2.begin());
assert(s1.end() == s2.end());
assert(s1.begin() + s1.size() == s2.end());
}
Все утверждения передают все реализации std :: span , но есть ли что -то, что я могу пропустить, что делает эту ошибку, например, Ub?

Код: Выделить всё

class some_class
{
public:
std::span vec_view() { return vec; }
private:
std::vector vec;
};

int main() {
some_class c;
std::for_each(c.vec_view().begin(), c.vec_view().end(), [](auto&){});
}
Это связано с C ++, позволяющим сравнивать между std :: span :: eterators, когда один промежуток является подпаном другого?, но этот вопрос не о STD :: subspan , и, кроме того>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ll-defined
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»