std:: memmove
|
Определено в заголовочном файле
<cstring>
|
||
|
void
*
memmove
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
Выполняет следующие операции в указанном порядке:
- Неявно создаёт объекты по адресу dest .
- Копирует count символов (как если бы типа unsigned char , далее аналогично) из объекта, на который указывает src , во временный массив arr из count символов, где arr не перекрывается с объектами, на которые указывают dest и src .
- Копирует count символов из arr в объект, на который указывает dest .
Если dest или src является нулевым указателем или недействительным указателем , поведение не определено.
СодержаниеПараметры
Возвращаемое значениеЕсли существует подходящий созданный объект , возвращает указатель на него; в противном случае возвращает dest . ПримечанияНесмотря на то, что спецификация указывает на использование временного буфера, фактические реализации этой функции не несут затрат на двойное копирование или дополнительную память. Для малых count может использоваться загрузка и запись регистров; для больших блоков распространённый подход (glibc и bsd libc) — копирование байтов в прямом направлении от начала буфера, если приёмник начинается до источника, и в обратном направлении от конца в противном случае, с переходом на std::memcpy при полном отсутствии перекрытия.
В случаях, когда
strict aliasing
запрещает обращение к одной и той же области памяти как к значениям двух разных типов,
Пример
Запустить этот код
Вывод: 1234567890 1234456890 Отчеты о дефектахСледующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
См. также
| |||||||||||||||||||||||||||||||||