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 | - | указатель на область памяти для копирования |
| src | - | указатель на исходную область памяти |
| count | - | количество байтов для копирования |
Возвращаемое значение
Если существует подходящий созданный объект , возвращает указатель на него; в противном случае возвращает dest .
Примечания
Несмотря на то, что спецификация указывает на использование временного буфера, фактические реализации этой функции не несут затрат на двойное копирование или дополнительную память. Для малых count может использоваться загрузка и запись регистров; для больших блоков распространённый подход (glibc и bsd libc) — копирование байтов в прямом направлении от начала буфера, если приёмник начинается до источника, и в обратном направлении от конца в противном случае, с переходом на std::memcpy при полном отсутствии перекрытия.
В случаях, когда
strict aliasing
запрещает обращение к одной и той же области памяти как к значениям двух разных типов,
std::memmove
может быть использован для преобразования значений.
Пример
Вывод:
1234567890 1234456890
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 4064 | C++98 | было неясно, указывает ли возвращаемый указатель на подходящий созданный объект | прояснено |
Смотрите также
|
копирует один буфер в другой
(функция) |
|
|
заполняет буфер символом
(функция) |
|
|
копирует определённое количество широких символов между двумя, возможно перекрывающимися, массивами
(функция) |
|
|
(C++11)
|
копирует диапазон элементов в новое место
(шаблон функции) |
|
копирует диапазон элементов в обратном порядке
(шаблон функции) |
|
|
(C++11)
|
проверяет, является ли тип тривиально копируемым
(шаблон класса) |
|
Документация C
для
memmove
|
|