Std :: launder в сочетании с reinterpret_cast

Отвечая на вопрос «Диапазон на основе цикла для массивов, выделенных кучей» сегодня, я наткнулся на предложение использовать reinterpret_cast для приведения типа указателя к типу массива с использованием std::launder (после некоторого обсуждения мы решили опубликовать новый вопрос, так как не смогли найти вывода.) . Приведение было выполнено следующим образом (скажем, например, чтобы иметь возможность использовать циклы на основе диапазона для итерации по массиву):

int* ptr = new int[3];
auto arr_ptr = std::launder(reinterpret_cast<int (*)[3]>(ptr));

Я почти уверен, что это UB, но не совсем уверен. Есть ли у кого-нибудь достаточно твердые в C++, чтобы ответить на этот вопрос?

Я думаю, это сводится к вопросу, действителен ли reinterpret_cast при преобразовании от типа ptr к типу массива, который, как мне кажется, является UB, и не имеет никакого отношения к тому, использую ли я std::launder.

Насколько я понимаю отмывку (а понимание не очень хорошее), она четко определена. Но почему бы не сделать new int[1][3] ?

Johannes Schaub - litb 27.08.2018 15:00

@ JohannesSchaub-litb Ты потерял меня;). Как бы помог new int[1][3].

user32434999 27.08.2018 15:02

Пожалуйста, не обращайте внимания на мой комментарий относительно отмывания. Видя примеры на cppreference о отмывке, я понимаю, что не имел представления об ограничениях его приложений.

Johannes Schaub - litb 27.08.2018 15:06

потому что ему не нужен гипс

Johannes Schaub - litb 27.08.2018 15:06

Где-то есть обман. Достаточно сказать, что этот фрагмент хорошо сформирован, но в нем есть удивительное количество нюансов.

Passer By 27.08.2018 15:11
eel.is/c++draft/expr.new#1: «Если это массив, результатом нового выражения является указатель на начальный элемент массива». И это дубликат того, что связал Прохожий.
geza 27.08.2018 15:15

Думаю, это правильно! Спасибо, что разъяснили мне это!

user32434999 27.08.2018 15:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
7
126
0

Другие вопросы по теме