Может ли std::ranges::enumerate перечислять любой возможный допустимый массив C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли std::ranges::enumerate перечислять любой возможный допустимый массив C++?

Сообщение Anonymous »

Однажды я спросил, использует ли std::ranges::views::enumerate неправильный тип () для индексации в GCC, но, видимо, это не так, потому что

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

std::views::enumerate
указан для использования range_difference_t в качестве значения индекса.

Однако из черновика
Тип size_t — это определяемый реализацией целочисленный тип без знака, который достаточно велик, чтобы содержать размер в байтах любого объекта ([expr.sizeof]).< /p>

Таким образом, можно представить массив настолько длинным, что конечные элементы из некоторого индекса и далее не соответствуют типу, используемому enumerate для индексации , хотя по определению все еще соответствует std::size_t, предоставленному на данной машине, выполняется следующее

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

static_assert(std::numeric_limits::max() > std::numeric_limits::max());
Например, такой массив будет таким:

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

std::vector v(std::numeric_limits::max());
для чего мне интересно, как развивается k в следующем:

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

auto w = v | std::ranges::views::enumerate;
for (auto [k, _] : w) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79195178/can-stdrangesenumerate-enumerate-any-possible-valid-c-array[/url]
Ответить

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

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

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

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

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