使用const引用模拟只读公共类成员

时间:2013-02-06 18:15:19

标签: c++

当我遇到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进行各种优化设置,但无济于事。

所以我有两个疑问:

  1. 编译器是否有任何理由不优化引用?
  2. 有没有办法强制编译器进行这种优化?也许使用一些非标准的__attribute__或新的C ++ 11 [[attribute]]或其他东西?
  3. 感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

编译器只对其作者进行优化

  1. 想过并且
  2. 被认为实际上非常有用,值得努力实施它们。
  3. 你的方法很不寻常,可能不是1,绝对不是2. Getters只是更灵活,没有任何空间成本,如果直接在类中定义它们,所有C ++编译器都可以内联它们(有些情况下他们不会,就像你想要保持共享库ABI兼容性,但你有完全控制权。)