web-dev-qa-db-ja.com

定義と宣言のインライン

最近のピアレビューで、別のソフトウェアエンジニアが、定義(クラス外)と宣言(クラス内)でinline関数がinlineであると述べたことを提案しました。 。彼の主張は、「インラインでマークすることにより、このメソッドは非インラインメソッドよりもはるかに高速に実行され、呼び出し元はへの過度の呼び出しについて心配する必要がないということです。メソッド。 "

本当?私がクラスのユーザーである場合、メソッドへの過度の呼び出しを本当に気にしますか?定義と宣言の両方でインラインとしてリストすることに何か問題がありますか? C++ FAQ 状態:

ベストプラクティス:クラス本体の外側の定義でのみ。

では、誰がここにいますか?

22
user195488

それは2つのまったく無関係なことのように聞こえます。クラス内の宣言とクラス外の定義の両方にinlineを配置する必要はありません。宣言の1つにそれを置くことで十分です。

関数が定義されている.cppファイルにinlineを追加することについて話し、その関数がpublicメンバーである場合は、notそれを行う。 inline関数を呼び出す人は、定義が見えるようにする必要があります。 C++標準ではそれが必要です。

インラインとしてマークすることにより、このメソッドは非インラインメソッドよりもはるかに高速に実行され、呼び出し元はメソッドへの過度の呼び出しについて心配する必要がないことを意味します。

それはナンセンスです。関数にinlineのマークを付けても、その関数が実際には物理的にインライン化されることを保証するものではありません。たとえそうだとしても、それはあなたの関数が「より速く」なるという保証ではありません。

定義inlineと宣言をマークすることで、ユーザーに何かについて保証があると偽って混乱させているだけですが、それは...

私がクラスのユーザーである場合、メソッドへの過度の呼び出しを本当に気にしますか?

あんまり。

実際、実際には、inlineを記述する必要があるのは、何らかの理由でインライン化を強制する必要がある場合のみですstorage(インライン化が発生するかどうかに関係なく、キーワードの使用は常に関数に対する単一定義規則…これを要求することはまれですが)。それ以外の場合は、コンパイラーにインライン化する関数を決定させて、次に進みます。これの当然の結果として、キーワードを使用して何かを文書化しているふりをすることを心配する必要はありません。