ステートメント: "インライン関数は、呼び出される前に定義する必要があります。"
この記述は正しいですか?
[編集]
質問はもともとドイツ語です:
Inline-Funktionen mussen vor ihrem Aufruf definiert sein.
多分それは誰かを助ける...
ステートメント: "インライン関数は、呼び出される前に定義する必要があります。"
この記述は正しいですか?
[編集]
質問はもともとドイツ語です:
Inline-Funktionen mussen vor ihrem Aufruf definiert sein.
多分それは誰かを助ける...
はい、それは正しいですが、部分的にしかありません。次のように正しく再構成されている可能性があります。
「インライン関数は、それらが呼び出されるすべての翻訳単位で定義する必要があります (ただし、その前である必要はありません)。」
C11++ 標準: §7.1.2.4
インライン関数は、それが使用されるすべての翻訳単位で定義され、すべての場合でまったく同じ定義を持つものとします。—終わりのメモ]
なぜこの根拠?
基本的にインラインで関数を宣言すると、関数が呼び出される場所で、関数を呼び出すためのコードを関数の内容に置き換えるようにコンパイラーに指示します。関数本体はおそらく小さく、関数の呼び出しは関数自体の本体よりもオーバーヘッドが大きいという考えです。
これを行うには、関数が呼び出されるコードのコンパイル中にコンパイラが定義を確認する必要があります。通常、これはinline
指定子を使用してヘッダーに関数の定義を追加し、関数が呼び出されるすべての cpp ファイルにヘッダー ファイルを含めることによって行われます。
いいえ。C++11 ドラフト n3242は、7.1.2 サブセクション 4 で以前の仕様が述べているよりも明確です。
インライン関数は、それが使用されるすべての翻訳単位で定義され、すべての場合でまったく同じ定義を持つものとします (3.2)。[ 注: インライン関数の呼び出しは、その定義が翻訳単位に表示される前に発生する場合があります。— エンドノート]
このステートメントは意味がありません。インライン化された関数は呼び出されなくなり、コードは単に現在の関数内に存在します (「インライン化」されています)。いいえ、それは正しくないと思います。