ホームページ  >  記事  >  バックエンド開発  >  memcpy を使用して C で簡単にコピー可能なオブジェクトを構築できますか?

memcpy を使用して C で簡単にコピー可能なオブジェクトを構築できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-19 20:32:02574ブラウズ

Can memcpy be Used to Construct a Trivially-Copyable Object in C  ?

memcpy を使用した簡単にコピー可能なオブジェクトの構築

C を使用する場合、開発者は memcpy を使用してオブジェクトをコピーすることの妥当性に関する疑問に遭遇することがあります。オブジェクトの表現バイト。具体的には、この行為がオブジェクトの構築または代入を構成するかどうかという疑問が生じます。

C 標準ではこのシナリオに明示的に対処していないため、この疑問は未解決のままです。ただし、特定の提案や議論は、この問題に関するガイダンスを提供します。

公式標準の視点

現在の C 14 ドラフト標準では、次のように述べられています。「オブジェクトは [.. .] 必要に応じて、定義、新しい式、または実装によって。"

さらに、既存の句でアドレス指定する簡単なコピー可能な型 (例: 3.9 [basic.types]) のコピーは、主に既にインスタンス化されたオブジェクト間のコピーに焦点を当てています。

提案 p0593

提案 p0593 は、次のことを試みます。この問題に対処し、低レベルのオブジェクト操作のためのオブジェクトの暗黙的な作成を定義します。これは、新しく割り当てられたストレージ内に十分に単純なタイプのオブジェクトが自動的に作成され、明確に定義された動作が保証されることを提案しています。

p0593 によると、次の操作は暗黙的にオブジェクトを作成する必要があります:

  • 作成char、unsigned char、または std::byte の配列
  • malloc、calloc、 realloc、operator new、operator new[]
  • std::allocator::allocate
  • memmove (ソースストレージを一時領域にコピーした後)

その他の考慮事項

[ub] 回避すべき型の語呂合わせに関する議論コピーすると、このトピックの複雑さがさらに強調されます。

全体的に、この主題に関する現在のガイダンスは解釈の余地がありますが、p0593 などの提案は、これらの操作の明確さと定義された動作を提供することを目的としています。

以上がmemcpy を使用して C で簡単にコピー可能なオブジェクトを構築できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。