Std::memmove и std::memcpy требуют объекты в качестве источника в соответствии с cppreferenceC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std::memmove и std::memcpy требуют объекты в качестве источника в соответствии с cppreference

Сообщение Anonymous »

Согласно документации cppreference, std::memmove и std::memcpy будут ожидать ввода адреса объекта, что теоретически ограничит их использование буфером, полученным из C-подобного API (, сетевой буфер,...):

std::memmove

Определено в заголовке

void* memmove( void* dest, const void* src, std::size_t count );

Выполняет следующие операции по порядку:

1- Неявно создает объекты по адресу dest.

2- Копирует символы счетчика (как если бы они имели тип unsigned char, то же самое ниже) из объекта, на который указывает src, во временный массив arr из символов счетчика, где arr не перекрывает объекты, на которые указывают dest и src.

3- Копирует символы счетчика из arr в объект, на который указывает dest.
/>

(выделено мной).
Но, глядя на стандарт, поведение этих функций соответствует стандарту C (раздел 7.28.2.3 для std::memmove), который не описывает эту последовательность операций (поскольку понятие объекта не такое, как в C++):

Описание

Функция memmove копирует n символов из объекта, на который указывает s2, в объект, на который указывает s1. Копирование происходит так, как будто n символов из объекта, на который указывает s2, сначала копируются во временный массив из n символов, который не перекрывает объекты, на которые указывают s1 и s2, а затем n символов из временного массива копируются в объект, на который указывает s1.

Более того, эти функции фактически неявно создают объекты в месте назначения (https://eel.is/c++draft/cstring.syn#3).
Так является ли cppreference переусердством и можно ли законно использовать эти функции в «необработанной» ячейке памяти (как я подозреваю из стандарта C)? (примечание: каков статус в C++ ячейки памяти, возвращаемой C-API (например, mmap)? (возможно, это должен быть другой вопрос))

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

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

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

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

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

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