Почему поведение std::launder многомерного массива неопределенное?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему поведение std::launder многомерного массива неопределенное?

Сообщение Anonymous »

Я читал документацию по std::launder и наткнулся на этот фрагмент кода:

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

int x2[2][10];
auto p2 = std::launder(reinterpret_cast(&x2[0][0]));
// Undefined behavior: x2[1] would be reachable through the resulting pointer to x2[0]
// but is not reachable from the source
Что такое int(*)[10]?

Я прочитал это как «массив ints размером 10 дюймов. Но тогда комментарий UB для меня не имеет смысла. x2[0] и p2 имеют размер 10. Пока вы не пытаетесь выполнять арифметические действия выше 10-го элемента (например, p2+10), вам не следует в стране UB, верно?
Ближе всего к ответу я нашел номер 71631428, но он не полностью отвечает на мои вопросы.
Изменить:

Что означает int(*)[10]?
Наконец-то я нашел ответ, и это базовые знания: «Указатель на массив целых чисел размером 10».
Остается другой вопрос о UB. Поэтому я отредактирую заголовок соответствующим образом.

Подробнее здесь: https://stackoverflow.com/questions/790 ... onal-array
Ответить

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

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

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

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

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