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++»