2 つのインライン関数を持つクラスがあるとします。
class Class {
public:
void numberFunc();
int getNumber() { return number; }
private:
int number;
};
inline void Class::numberFunc()
{
number = 1937;
}
そのクラスをインスタンス化し、クラス内の両方の関数を呼び出します。
int main() {
Class cls;
cls.numberFunc();
cout << cls.getNumber() << endl;
return 0;
}
両方のインライン関数がまだクラスのメンバーであることは理解していますが、インライン関数の本体内のコードが呼び出された場所に挿入されていることも理解しています。その挿入の結果として、number
私が知る限りmain()
、コンパイラへのコードは次のようになるため、メンバー変数に直接アクセスできないようです。
main() {
Class cls;
cls.number = 1937;
cout << cls.number << endl;
return 0;
}
なぜ私がまだそれらのプライベートメンバーにアクセスできるのか、またはインライン関数の理解について私を修正できるのか、誰かが私に説明できますか? inline
コンパイラには、一部の関数を無視するオプションがあることを知っています。それがここで起こっていることですか?
出力:
1937年