当我遇到public const references to private members
的主题时,我正在谷歌搜索“C ++中的只读公共类成员”:
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]]
或其他东西?感谢任何帮助:)
答案 0 :(得分:0)
编译器只对其作者进行优化
你的方法很不寻常,可能不是1,绝对不是2. Getters只是更灵活,没有任何空间成本,如果直接在类中定义它们,所有C ++编译器都可以内联它们(有些情况下他们不会,就像你想要保持共享库ABI兼容性,但你有完全控制权。)