ホームページ  >  記事  >  バックエンド開発  >  C 11 では「constexpr」と「inline」はどのように連携しますか?

C 11 では「constexpr」と「inline」はどのように連携しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 05:42:02516ブラウズ

How Does `constexpr` Interact with `inline` in C  11?

C 11 の Constexpr と Inline 関数

C 11 では、関数の型修飾子として constexpr が導入されたことで、既存のメカニズムである inline との関係について疑問が生じました。インライン関数用。この記事では、constexpr の意味と、constexpr がインラインとどのように相互作用するかを検証します。

Constexpr はインラインを暗黙的に示します

C 11 標準では、「constexpr 関数と constexpr コンストラクターは暗黙的にインラインである」と明示的に規定されています。これは、constexpr を関数指定子として使用すると、暗黙的にインライン指定子も設定されることを意味します。したがって、関数が constexpr と宣言されている場合、その関数はインライン指定子があるかのように動作します。

非定数引数の意味

これは、非定数引数が関数に渡された場合に暗黙的に意味します。 constexpr 関数の場合でも、コンパイラは、インラインで宣言されているかのように関数をインライン化しようとします。これは、constexpr 関数が、単純で再帰的ではないなど、インライン化に適した特定の条件を満たす必要があるためです。

1 つの定義ルール

ただし、インライン化に注意することが重要です。指定子は、インライン化自体よりも 1 つの定義ルール (ODR) に大きな影響を与えます。異なるインライン修飾子を持つ関数は複数の定義を持つことができますが、constexpr 関数はインライン関数と同様に 1 つの定義を持つ必要があります。

結論

constexpr 関数は暗黙的にインラインを暗黙的に示しますが、インライン指定子の影響は限定的ですインライン化の決定について。コンパイラは、サイズや複雑さなどのさまざまな要因に基づいて、関数をインライン化するかどうかを最終的に決定します。 Constexpr 関数は当初、インライン化に適するように設計されましたが、その後の緩和により、より複雑な constexpr 関数が可能になりました。

以上がC 11 では「constexpr」と「inline」はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。