2

当我遇到以下主题时,我正在对“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 尝试了各种优化设置,但无济于事。

所以我有两个疑问:

  1. 编译器没有优化引用是否有任何原因?
  2. 有没有办法强制编译器进行这种优化?也许使用一些非标准__attribute__或新的 C++11[[attribute]]或其他东西?

任何帮助表示赞赏:)

4

1 回答 1

0

编译器只做他们作者的优化

  1. 想过和
  2. 被认为实际上有用,值得努力实施它们。

您的方法很不寻常,可能不是 1,也绝对不是 2。Getter 更灵活,没有任何空间成本,如果直接在类中定义它们,所有 C++ 编译器都可以内联它们(在某些情况下它们不会)不是,就像你想保持共享库 ABI 兼容性,但你有完全的控制权)。

于 2013-02-07T08:42:39.580 回答