私たちは 'extern template'を持っておらず、 'template'関数は常に 'implicit inline'です。それはとにかく意味がありますか?C++静的インラインでテンプレート関数を宣言することは理にかなっていますか?
3
A
答えて
3
それは私には意味がありません。関数テンプレートは "暗黙のインライン"ではありません。インラインにするには、インラインで明示的に宣言する必要があります。
これは、その呼び出しがインラインであるかインライン化されているわけではありません。それは完全にコンパイラの決定です。テンプレートは複数の翻訳単位で定義することができます(それぞれの定義はテンプレートに同じ動作を与えます)。inline
をそのようなテンプレートに入れることは、私が見ることのできる効果がそれほどありません。唯一の効果は、オプティマイザに、私が見ることのできるものから関数テンプレートへの呼び出しをインライン化することを望むことを伝えることです。
ファンクションテンプレートの作成static
は完全に分かりやすいです。これにより、複数の翻訳単位で定義されたテンプレートを持つことができ、各定義は異なる動作をします。 static
のため、テンプレートには内部リンケージがあります。つまり、翻訳単位にローカルであり、衝突しません。
static
を関数と関数のテンプレートに入れることは、それらの上にinline
を置くこととは完全に独立しています。 static
とinline
はC++に依存せず、they are in C99のようになります。
関連する問題
- 1. テンプレートなしでC++関数を宣言することはできません
- 2. OSXで静的なC++関数を友人として宣言する方法
- 3. 静的インライン関数はスレッドセーフですか?
- 4. 静的クラス関数[C++]で 'using'宣言を使用することはできますか?
- 5. なぜfprintfを使用する場合、インライン関数を静的宣言する必要がありますか?
- 6. C#:関数がnullを返すことはないと宣言しますか?
- 7. このエラーはなぜ発生しましたか? "関数の静的宣言は非静的宣言に従います"?
- 8. C++/CLIで静的関数を宣言/書き出すことは可能ですか?
- 9. メソッドが静的キーワードと宣言されていない場合、クラス内でPHP関数を静的に呼び出すことができますか?
- 10. 「関数宣言」を「関数宣言」として定義することはできますか?
- 11. これはC++で有効な関数宣言ですか?
- 12. 関数から関数を返すときに配列を静的として宣言する必要があるのはなぜですか。 (C++)
- 13. mの静的宣言は非静的宣言に従います
- 14. Cでの静的変数宣言/初期化の理解
- 15. インライン関数と宣言した関数を宣言した関数AngularJS
- 16. 関数内で宣言された静的変数にアクセスしています
- 17. 使用宣言は静的ですか?
- 18. C#静的リストを宣言する
- 19. C++ヘッダーで静的変数を宣言して定義しますか?
- 20. すべてのメソッドと変数を静的に宣言することでシングルトンオブジェクトを作成できますか?
- 21. ヘッダーファイルの静的なグローバル関数を宣言する
- 22. なぜ私は静的な最終変数を非静的なブロックで宣言していませんか?
- 23. インライン関数と静的インライン関数の違い
- 24. 2つの異なる静的変数を宣言するにはどうすればいいですか? (C++)
- 25. C#で静的関数内で非静的関数を呼び出すことはできますか?
- 26. C++クラスの静的宣言
- 27. Objective-Cでの静的変数宣言の違いは何ですか?
- 28. すぐにインライン関数を宣言する方法はありますか?
- 29. どこで静的変数を宣言する必要がありますか?
- 30. 関数内で宣言された静的変数の値は何ですか?
あなたは何を意味するのか分かりません。 C++ではexternテンプレート関数がないので、テンプレート関数 "implicit inline"を定義する必要があります。 – 0xbadf00d
@FrEEこれは "インライン"のC++の使用ではありません。あなたは「別のコンパイルなし」を意味します。エクスポートテンプレートがないことを意味します。いくつかのフロントエンドとコンパイラは、 "extern template" C++ 0x機能を実装しています。 –