1. ホーム
  2. c++

[解決済み] C++11で非推奨となるC++イディオムは?

2022-04-25 12:53:14

質問

新しい規格では、新しいやり方があり、多くは古いやり方よりすっきりしていますが、古いやり方でも問題ありません。 また、後方互換性の理由から、新しい規格は公式にはあまり非推奨でないことも明らかです。 そこで、残る疑問があります。

C++11のスタイルより確実に劣っている古いコーディング方法と、その代わりに今できることは何でしょうか?

回答にあたっては、quot;use auto variables"のような明白なものは飛ばしてもかまいません。

解決方法は?

  1. 最終クラス : C++11では final 指定子により、クラスの派生を防ぐことができます。
  2. C++11のラムダは、名前付き関数オブジェクト(ファンクタ)クラスの必要性を大幅に削減します。
  3. 移動コンストラクタ : の魔法のような方法 std::auto_ptr が動作することは、rvalue 参照のファーストクラスのサポートにより、もはや必要ありません。
  4. 安全なブール : これは先に述べたとおりです。C++11の明示的な演算子は、この非常に一般的なC++03のイディオムを回避することができます。
  5. フィットするように縮小 : 多くのC++11 STLコンテナでは、STLを使用するために shrink_to_fit() メンバ関数を使用することで、テンポラリとのスワップが不要になるはずです。
  6. 一時的な基底クラス : 古いC++ライブラリの中には、このかなり複雑なイディオムを使っているものがあります。ムーブセマンティクスでは、もはや必要ありません。
  7. タイプセーフ列挙型 C++11では、列挙は非常に安全です。
  8. ヒープ割り当ての禁止 : を使用することができます。 = delete 構文は、特定の機能が明示的に拒否されていることを示す、より直接的な方法です。これは、ヒープ割り当ての禁止に適用できます(つまり。 =delete メンバーに対して operator new ) 、コピー、割り当てなどを防止する。
  9. テンプレート化されたtypedef : エイリアス テンプレート C++11 では、単純なテンプレート化された型定義は必要なくなる。しかし、複雑な型生成器には、依然としてメタ関数が必要である。
  10. フィボナッチなどの一部の数値コンパイル時計算は 一般化された定数式
  11. result_of : クラステンプレートの使用例 result_of に置き換える必要があります。 decltype . 私が思うに result_of 用途 decltype が利用可能な場合。
  12. クラス内メンバ初期化子 デフォルト値を持つ非静的メンバのデフォルト初期化のためのタイピングを保存します。
  13. 新しいC++11のコードでは NULL は、次のように再定義する必要があります。 nullptr を参照してください。 STLの話 その理由は、"SONY "が "SONY "を否定した理由をご覧ください。
  14. 表現テンプレート マニアにはたまらない トレーリングリターン型 C++11の関数構文で、30行の長い戻り値の型はもう必要ありません!

この辺で止めておこうと思います!