ホームページ > バックエンド開発 > C++ > GCC の Constexpr 非 Constexpr 標準ライブラリ関数の扱いは適合拡張ですか?

GCC の Constexpr 非 Constexpr 標準ライブラリ関数の扱いは適合拡張ですか?

Susan Sarandon
リリース: 2024-11-30 01:49:09
オリジナル
825 人が閲覧しました

Is GCC's Constexpr Treatment of Non-Constexpr Standard Library Functions a Conforming Extension?

Constexpr 以外の標準ライブラリ関数を Constexpr として扱うことは、適合するコンパイラ拡張機能ですか?

現在の C 標準では、標準ライブラリ関数を次のように宣言することが義務付けられています。 constexpr は明示的に必要な場合にのみ使用してください。しかし、以前のドラフトではそうではないと示唆されていました。

C 11 とドラフト標準

C 11 の開発中、提案は非 constexpr 標準ライブラリ関数を次のように扱うことを明示的に許可することを目的としていました。 constexpr。この機能を厳密準拠モードでサポートするという GCC の決定は、このドラフトに基づいています。

C 14 でのコンセンサスの変化

しかし、コンセンサスは C 14 の開発中に変化しました。この提案は修正され、最終的な標準では、明示的に必要な場合を除き、実装が標準ライブラリ関数 constexpr を宣言することは禁止されていると規定されています。

この変更は、SFINAE がこれを利用して異なるものを生成する可能性があるため、実装間での相違する動作に関する懸念から生じています。同一のコードの結果。

の適合性GCC

この場合の GCC の現在の実装は、C 14 標準に違反しているため、不適合な拡張機能です。準拠を達成するには、GCC は警告を発行するか、厳密準拠モードでこの機能を無効にする必要があります。

組み込み

コンパイラ組み込みは、標準ライブラリ関数とは異なり、これから免除されます。これらは標準でカバーされていないため、ルールに従う必要があります。したがって、一般に、組み込み関数を constexpr として扱うことは許可されています。

以上がGCC の Constexpr 非 Constexpr 標準ライブラリ関数の扱いは適合拡張ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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