Требует ли Memcpy указатель на массив, а не на первый элемент?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Требует ли Memcpy указатель на массив, а не на первый элемент?

Сообщение Anonymous »

В стандарте C ++ значение memcpy взято из C (я буду цитировать C ++ 23 здесь, но я не верю, что формулировка изменилась из более ранних версий): < /p>

Содержимое и значение заголовка такого же, как и стандартный заголовок библиотеки C. В 7.26.2.1:

Функция memcpy копирует n символов из объекта, указанного By S2 [второй аргумент] в объект, указанный на
s1 [первый аргумент]. < /p>
< /blockquote>
Однако часто, часто, в C ++, мы видим, как: < /p> p> p> p> p> p> g.

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

constexpr std::size_t N = sizeof(T);
char buf[N];
T obj;
std::memcpy(buf, &obj, N);
std::memcpy(&obj, buf, N);
Это взято из примера из стандарта C ++.
В этом коде «buf» -pointer, переданный в Memcpy технически указывает на первый элемент BUF , поскольку он производится с помощью распада массива к указателю. Строго говоря, объект и, с которого Memcpy , следовательно, должен быть первым элементом, а не весь массив. Может ли быть необходимо использовать и BUF здесь, чтобы быть правильным и полностью избежать UB? Это стандартный дефект? В первую очередь речь идет о формулировке стандарта и поведении «абстрактной машины», а не о том, работает ли это в реальном мире программ C ++, созданных реальными компиляторами.

Подробнее здесь: https://stackoverflow.com/questions/796 ... st-element
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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