std:: memmove
|
ヘッダーで定義
<cstring>
|
||
|
void
*
memmove
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
以下の操作を順番に実行します:
-
destにオブジェクトを暗黙的に作成 します。 -
srcが指すオブジェクトからcount文字(型unsigned charとして扱う、以下同様)をコピーし、count文字の一時配列arrに格納します。 ここでarrはdestとsrcが指すオブジェクトと オーバーラップしません。 -
arrからcount文字をdestが指すオブジェクトにコピーします。
dest または src が ヌルポインタ または 無効なポインタ の場合、動作は未定義です。
目次 |
パラメータ
| dest | - | コピー先のメモリ位置へのポインタ |
| src | - | コピー元のメモリ位置へのポインタ |
| count | - | コピーするバイト数 |
戻り値
適切に作成されたオブジェクトが存在する場合、そのオブジェクトへのポインタを返します。それ以外の場合は dest を返します。
注記
仕様では一時バッファが使用されるとされているにもかかわらず、この関数の実際の実装では二重コピーや余分なメモリのオーバーヘッドは発生しません。小さい count の場合、レジスタの読み込みと書き出しが行われる可能性があります。より大きなブロックでは、一般的なアプローチ(glibcおよびbsd libc)として、コピー先がコピー元より前に始まる場合はバッファの先頭から順方向に、それ以外の場合は末尾から逆方向にバイトをコピーし、全くオーバーラップがない場合には std::memcpy にフォールバックします。
strict aliasing
が同じメモリを異なる2つの型の値として検査することを禁止する場合、
std::memmove
を使用して値を変換することができます。
例
出力:
1234567890 1234456890
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 4064 | C++98 | 返されたポインタが適切に作成されたオブジェクトを指すかどうか不明確であった | 明確化された |
関連項目
|
バッファを別のバッファにコピーする
(関数) |
|
|
バッファを文字で埋める
(関数) |
|
|
2つの配列(重複する可能性あり)間で指定された量のワイド文字をコピーする
(関数) |
|
|
(C++11)
|
要素の範囲を新しい場所にコピーする
(関数テンプレート) |
|
要素の範囲を逆順にコピーする
(関数テンプレート) |
|
|
(C++11)
|
型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート) |
|
Cドキュメント
for
memmove
|
|