当我遇到以下主题时,我正在对“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 getter 函数更喜欢这个概念:你可以编写myPlanet.Mass
而不是看起来很冗长的myPlanet.GetMass()
. 但是,我发现这是以一个额外的引用变量的内存为代价的。我无法理解的是为什么编译器不优化此引用使用的空间,因为它指向的对象永远不会改变,并且指向的对象在编译时是已知的(感谢新的 c++11 语法)。我用 gcc 尝试了各种优化设置,但无济于事。
所以我有两个疑问:
- 编译器没有优化引用是否有任何原因?
- 有没有办法强制编译器进行这种优化?也许使用一些非标准
__attribute__
或新的 C++11[[attribute]]
或其他东西?
任何帮助表示赞赏:)