ホームページ > バックエンド開発 > C++ > C 11 のデフォルト コンストラクターに `=default` を使用するのはなぜですか?

C 11 のデフォルト コンストラクターに `=default` を使用するのはなぜですか?

DDD
リリース: 2024-12-10 07:52:09
オリジナル
929 人が閲覧しました

Why Use `= default` for Default Constructors in C  11?

C 11 のデフォルト コンストラクターで "=default" を使用する理由

C の従来のデフォルト コンストラクター構文では、単純に空のコンストラクター関数を定義していました。

S() {}
ログイン後にコピー

ただし、C 11 では「=default」構文が導入され、いくつかの機能が提供されます。利点:

  1. ODR 使用の明示的な説明: 明示的にデフォルト設定されたデフォルト コンストラクターは、初期化リストと空の複合文。これにより、さまざまなユースケース間で一貫した動作が保証されます。
  2. 集約型プロパティと自明型プロパティ: 従来の空のコンストラクターは集約型プロパティと自明型プロパティを保持しますが、宣言されたデフォルト コンストラクターは、空のコンストラクターであっても保持します。ない。 「=default」を使用すると、必要に応じてこれらのプロパティを明示的に削除できます。
#include <type_traits>

struct X {
    X() = default;
};

struct Y {
    Y() {}
};

int main() {
    static_assert(std::is_trivial<X>::value, "X should be trivial");
    static_assert(std::is_pod<X>::value, "X should be POD");
    
    static_assert(!std::is_trivial<Y>::value, "Y should not be trivial");
    static_assert(!std::is_pod<Y>::value, "Y should not be POD");
}
ログイン後にコピー
  1. 暗黙的コンストラクターの一致するプロパティ: 「=default」構文により、明示的に定義されたプロパティが確実に削除されます。デフォルトのコンストラクターは、constexpr や例外の仕様を含む暗黙的なコンストラクターのプロパティと一致します。これにより、コードの可読性が向上します。
  2. 統一構文: 「=default」構文は、コピー/移動コンストラクターやデストラクターなどの特別なメンバー関数を定義するための統一メソッドを提供し、コードの一貫性を高め、コードをより簡単に定義できるようにします。わかりました。

以上がC 11 のデフォルト コンストラクターに `=default` を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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