次のトピックに出くわしたとき、「C++ の読み取り専用パブリック クラス メンバー」についてグーグルで調べていましたpublic const references to private members
。
class Planet
{
private:
int64_t mass_;
public:
Planet(int64_t mass);
const int64_t & Mass = mass_; // I'm using C++11
};
私はこの概念がインラインの const ゲッター関数よりも好きでした。これは、構文糖分のためです。myPlanet.Mass
かなり冗長に見えるmyPlanet.GetMass()
. ただし、これには参照変数が 1 つ増えるため、メモリが犠牲になることがわかりました。私が理解できないのは、コンパイラがこの参照によって使用されるスペースを最適化しない理由です。これが指すオブジェクトは決して変更されず、指すオブジェクトはコンパイル時に認識されるためです (新しい c++11 構文のおかげです)。gcc でさまざまな最適化設定を試しましたが、役に立ちませんでした。
だから私は2つの疑問があります:
- コンパイラが参照を最適化しない理由はありますか?
- コンパイラにこの最適化を強制する方法はありますか? たぶん、非標準
__attribute__
または新しいC++ 11などを使用し[[attribute]]
ていますか?
どんな助けでも大歓迎です:)