5

への回答を読んだだけです

変数の const と constexpr

そして、 C++11/14 機能に関するこの Google Tech Talk を見ています。その中で、関数に関して言えば、constexpr は将来的には必要なくなるかもしれないと言われています。コンパイラは進化して独自にそれを理解するからです。 . 最後に、Java コンパイラーと JVM は、構築後にクラス (または任意の変数) が不変であることを理解しようと懸命に努力していることを知っています。

それで、ここに質問があります: const と constexpr の運命は最終的に同じものになるのでしょうか? つまり、コンパイラが実行時の初期化などを行うことは保証されていませんが、最終的には可能な限り(基本的に)そうするのではないでしょうか? その場合、キーワードの 1 つが冗長になることはありませんか? (インラインになっているように、多分)?

4

1 に答える 1

7

いいえ、どちらも他のものに取って代わるものではなく、役割が異なります。Bjarne Stroustrup は、彼のC++ FAQで、constexpr は const の代替ではなく、各機能のさまざまな役割の概要を説明していると述べています。

constexpr は const の汎用的な代替品ではないことに注意してください (またはその逆):

  • const の主な機能は、オブジェクトがインターフェイスを介して変更されないという考えを表現することです (オブジェクトが他のインターフェイスを介して変更される可能性が非常に高い場合でも)。オブジェクトconstを宣言すると、コンパイラに優れた最適化の機会が提供されます。特に、オブジェクトがconstと宣言されていて、そのアドレスが取得されていない場合、コンパイラは多くの場合、コンパイル時に初期化子を評価し (保証はされていません)、生成されたコードにオブジェクトを出力するのではなく、そのオブジェクトをテーブルに保持できます。 .
  • constexpr の主な機能は、コンパイル時に計算できる範囲を拡張し、そのような計算タイプを安全にすることです。constexprと宣言されたオブジェクトは、コンパイル時に評価される初期化子を持ちます。これらは基本的にコンパイラのテーブルに保持される値であり、必要な場合にのみ生成されたコードに出力されます。
于 2015-01-08T22:46:12.993 に答える