ホームページ > バックエンド開発 > C++ > 自動移動操作生成ルールは C 98 と C 11 でどのように異なりますか?

自動移動操作生成ルールは C 98 と C 11 でどのように異なりますか?

Linda Hamilton
リリース: 2024-11-29 05:32:16
オリジナル
1005 人が閲覧しました

How Do Automatic Move Operation Generation Rules Differ Between C  98 and C  11?

自動移動操作の生成ルール

C 98 では、コンパイラはメンバーごとのコピーを通じてコピー コンストラクターとコピー代入演算子を自動的に作成できました。このプロセスは、移動セマンティクスの導入により C 11 まで拡張されました。ただし、移動操作の自動生成のルールは、コピー操作のルールとは異なります。

Howard Hinnant の ACCU 2014 プレゼンテーションでは、これらのルールの簡潔な概要が説明されています。次の表は重要なポイントをまとめたものです:

</p>
<table>
<thead><tr>
<th> </th>
<th>Destructor</th>
<th>Move Constructor</th>
<th>Move Assignment Operator</th>
</tr></thead>
<tbody>
<tr>
<td>C  98/03</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>C  11 (Defect Report 1492)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>C  11 Final</td>
<td>Yes</td>
<td>Yes<sup>*</sup>
</td>
<td>Yes<sup>*</sup>
</td>
</tr>
</tbody>
</table>
<p>

はい: 自動的に生成されます。
いいえ: 自動的には行われません

*ただし、暗黙的に定義されているだけです (宣言されていない、または宣言済み=デフォルト)。明示的な定義は生成を抑制します。

これらのルールは、移動コンストラクターと移動代入演算子は通常、C 11 で自動的に生成されますが、生成されない場合があることを示しています。たとえば、デストラクターが明示的に定義されている場合、移動操作は生成されません。同様に、移動操作自体を明示的に定義すると、自動生成が抑制されます。

以上が自動移動操作生成ルールは C 98 と C 11 でどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート