2011-07-06 6 views

答えて

3

それは私には意味がありません。関数テンプレートは "暗黙のインライン"ではありません。インラインにするには、インラインで明示的に宣言する必要があります。

これは、その呼び出しがインラインであるかインライン化されているわけではありません。それは完全にコンパイラの決定です。テンプレートは複数の翻訳単位で定義することができます(それぞれの定義はテンプレートに同じ動作を与えます)。inlineをそのようなテンプレートに入れることは、私が見ることのできる効果がそれほどありません。唯一の効果は、オプティマイザに、私が見ることのできるものから関数テンプレートへの呼び出しをインライン化することを望むことを伝えることです。

ファンクションテンプレートの作成staticは完全に分かりやすいです。これにより、複数の翻訳単位で定義されたテンプレートを持つことができ、各定義は異なる動作をします。 staticのため、テンプレートには内部リンケージがあります。つまり、翻訳単位にローカルであり、衝突しません。

staticを関数と関数のテンプレートに入れることは、それらの上にinlineを置くこととは完全に独立しています。 staticinlineはC++に依存せず、they are in C99のようになります。

+0

あなたは何を意味するのか分かりません。 C++ではexternテンプレート関数がないので、テンプレート関数 "implicit inline"を定義する必要があります。 – 0xbadf00d

+0

@FrEEこれは "インライン"のC++の使用ではありません。あなたは「別のコンパイルなし」を意味します。エクスポートテンプレートがないことを意味します。いくつかのフロントエンドとコンパイラは、 "extern template" C++ 0x機能を実装しています。 –

関連する問題