11.8 ARM C++ のアナクロニズム

--anachronisms オプションを使用すると、アナクロニズムのサポートを有効にすることができます。

以下のアナクロニズムを使用できます。
  • 関数宣言で 多重定義 が許可されます。このような多重定義は容認されますが、無視されます。
  • デフォルトの初期化を使用して初期化できるスタティックデータメンバの定義は不要です。このアナクロニズムは、テンプレートクラスのスタティックデータメンバには適用されません。このようなスタティックデータメンバは常に定義する必要があります。
  • 配列削除演算では配列の要素数を指定できますが、この値は無視されます。
  • operator++() 関数と operator--() 関数を 1 つ使用すると、前置演算と後置演算の両方を多重定義できます。
  • イミディエートベースクラスが 1 つしか存在しない場合は、ベースクラスイニシャライザ内でベースクラス名を省略できます。
  • コンストラクタおよびデストラクタ内では this ポインタの代入が許可されます。
  • bound 関数のポインタ、つまり特定のオブジェクトのメンバ関数へのポインタは、関数へのポインタにキャストできます。
  • 入れ子になったクラス名は、その名前で他のクラスが宣言されていなければ、入れ子になっていないクラス名として使用できます。このアナクロニズムはテンプレートクラスには適用されません。
  • const 型以外への参照は、異なる型の値で初期化できます。一時データが作成され、その一時データが変換された初期値で初期化されて、その一時データに参照が設定されます。
  • const クラス型以外への参照は、クラス型の右辺値またはそのクラス型から派生したクラスで初期化できます。一時データが追加使用されることはありません。
  • 旧方式のパラメータ宣言を使用する関数は許可され、プロトタイプ宣言されたかのように多重定義される関数に参加できます。互換性チェックの完了時、関数のパラメータ型にはデフォルトの引数のプロモーションが適用されないため、以下の例では f という名前の付いた 2 つの関数の多重定義が宣言されます。
    int f(int);
    int f(x) char x; { return x; }
    

    C でも上のコードを使用できますが、意味が異なります。f の仮宣言の後には、その定義が続きます。
関連する参考文書
8.5 --anachronisms、--no_anachronisms
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.