技術共有

C 11 の新機能の紹介 - パート 2

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

11. 自動型推定

(1) オートタイプの自動導出
auto 変数の型を自動的に推測します
auto は実際の型を表すのではなく、型宣言の単なるプレースホルダーです。
auto は全能ではなく、どのようなシナリオでも推定することができます。 auto を使用して宣言された変数は、コンパイラが実際の型を推定し、コンパイル時に auto を実際の型に変換できるように初期化する必要があります。
変数がポインタまたは参照でない場合、導出結果には const および volatile キーワードが保持されません。変数がポインタまたは参照である場合、導出結果には const および volatile キーワードが保持されます。
自動を使用できないシナリオ:
1.auto を関数パラメータとして使用することはできません。これは、auto を仮パラメータとして使用することは、変数を初期化しないことと同等であり、auto をエクスポートできないためです。
2. 非静的メンバー変数はオブジェクトに属し、オブジェクトの型は作成されるまで不明であるため、クラスの非静的メンバー変数の初期化には使用できません。
3. auto キーワードを使用して配列を定義することはできません。
4. Auto を使用してテンプレート パラメータを導出することはできません。
自動の推奨使用シナリオ:
1. STL コンテナの走査に使用されます。
2. 汎用プログラミングに使用されます。
(2) decltype型の導出
変数を定義する必要がない、または定義できない場合がありますが、decltype を使用してコンパイル中に式の型を推定できます。 int x=18; ;つまり、a から x までの型を推測します。
導出ルール:
1. 式が通常の変数、通常の式、または時間クラス式であり、decltype を使用して推定された型が式の型と一致している。
2. 式は関数であり、decltype を使用して推定された型は関数の戻り値と一致します (戻り値が const、volatile 修飾子で変更されている場合、修飾子は無視されます)。
3. 式は左辺値であるか、() で囲まれており、decltype は式の型への参照を推定するために使用されます (戻り値が const または volatile 修飾子で変更されている場合、修飾子は無視されます)。
decltype のアプリケーション シナリオ:
1. ジェネリック プログラミングには不確実な型が多数あるため、ジェネリック プログラミングで主に使用されます。

12.最終使用

Final は、特定のクラスの継承や特定の仮想関数のオーバーライドを制限するために使用されます。
Final が関数を変更する場合、変更できるのは仮想関数のみであり、final キーワードはクラスまたは関数の後に置く必要があります。仮想関数が Final で変更されると、サブクラスが親クラスの仮想関数をオーバーライドできなくなる可能性があります。
Final でクラスを変更する場合は、クラス名の後に「final」と記述します。これは、このクラスの継承が許可されなくなったこと、つまり、このクラスに派生クラスが存在しなくなったことを示します。

13.使用

初期の役割: 名前空間を宣言するために使用されます。名前空間を使用すると、ユーザーのサブクラスが非表示の親クラスと同じ名前のメソッドを呼び出すのを防ぐことができます。
新しい関数: 型のエイリアスを定義します。 using は実際には新しい型を定義するのではなく、元の型にエイリアスを与えるだけであることに注意してください。 使用方法: using new type = old type など: using my_int = int;
typedef の代わりに using を使用して関数ポインターを定義すると、コードが読みやすくなります。初期の頃は、typedef int ( など) が関数ポインターの定義に使用されていました。func)(int, string);代わりに using 定義を使用します: using func = int()(int, 文字列);
を使用するとテンプレートのエイリアスを指定できますが、typedef では指定できません

14.直角ブラケット

初期の C コンパイラは 2 つの直角括弧を右シフト演算子として解釈しました
新しい機能の中で、コンパイラの解析ルールが改善され、複数の直角括弧を可能な限りテンプレート パラメータ ターミネータに解析するようになりました。

15.使用を上書きする

オーバーライドは、派生クラスでオーバーライドされる関数が、基本クラスの対応する仮想関数と同じシグネチャを持つことを保証するために使用され、また、基本クラスの関数がオーバーライドされることを明確に示します。
Override は関数の後に記述され、関数がオーバーライドされることを明示的に示し、コンパイラは関数の型と親クラスの仮想関数をチェックします。

16. 戻り値の型の接尾語

関数宣言本体、auto func (パラメータ1、パラメータ2、...)の後に関数の戻り値の型を記述します。