std::memmove
來自 cppreference.com
在標頭檔案 <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。
在嚴格別名禁止將同一記憶體作為兩種不同型別的值進行檢查時,`std::memmove` 可用於轉換值。
[編輯] 示例
執行此程式碼
輸出
1234567890 1234456890
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 4064 | C++98 | 尚不清楚返回的指標是否指向合適的已建立物件 | 已明確 |
[編輯] 參閱
將一個緩衝區複製到另一個緩衝區 (函式) | |
用字元填充緩衝區 (函式) | |
在兩個可能重疊的陣列之間複製一定數量的寬字元 (函式) | |
(C++11) |
將一個範圍的元素複製到一個新位置 (函式模板) |
以逆序複製一個範圍的元素 (函式模板) | |
(C++11) |
檢查型別是否為可平凡複製型別 (類模板) |
C 文件 for memmove
|