ここには状況があります。私はいくつかの保護されたデータメンバーといくつかのパブリックゲッター関数(1行の本体)を持つヘッダーファイルで宣言された基本クラスを持っています。仮想メソッドはありません。サブクラスはそれから派生し、独自のコンストラクタを定義します。そのコンストラクタの定義は、対応するcppファイルに配置されます。基本クラス本体の中で宣言されているが派生クラスを通して呼び出された関数のインライン化
派生クラスのオブジェクトを通してゲッター関数への呼び出しをインライン化できますか?
編集:ここに私のコードです。
// quad.h
class QuadratureRule {
protected:
int ngauss;
Array points;
Array weights;
public:
QuadratureRule(int ng) : ngauss(ng) { }
double getweights(int ig) const {
return weights[ig];
}
};
class Quadrature2D : public QuadratureRule {
public:
Quadrature2D(int ng);
};
そして
//quad.cpp
#include "quad.h"
Quadrature2D::Quadrature2D(int ng) : QuadratureRule(ng) {
// initialize arrays in a certain way
}
私はクラスQuadrature2D
のオブジェクトによって呼び出されたときgetweights
をインライン化します。 また、私はGCC g ++ 5.4と6.3を使用しています。
あなたの質問は明らかかもしれませんが、コードはボリュームを話します。コードデモンストレーションを提供できますか? – WhiZTiM
おそらく、そうです。確かめる唯一の方法は、生成されたコードを調べることです。 (C++に関数のインライン展開が必要なケースはありません;実装次第です) – molbdnilo
コードをインライン化してはならない理由はありません。この点に関して、あなたの状況は他の関数に比べて特別なものではありません。しかし、それでも関数がインライン化される保証はありません。あなたのアセンブリを確認してください。 – overseas