我在谷歌上搜索“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()。然而,我发现这是以额外的引用变量的内存为代价的。我无法理解的是,为什么编译器不优化这个引用所使用的空间,因为它指向的对象永远不会改变,并且在编译时所指向的对象是已知的(多亏了新的c++11语法)。我和gcc一起尝试了各种优化设置,但都没有效果。
所以我有两个疑问:
__attribute__或者新的C++11 [[attribute]]什么的?如有任何帮助,我们将不胜感激:)
发布于 2013-02-07 08:42:39
编译器只对其作者进行优化。
您的方法非常不寻常,可能不是1,也肯定不是2。Getters只是更灵活,没有任何空间开销,如果它们是直接在类中定义的,所有C++编译器都可以内联它们(有些情况下它们不会,比如当您想要维护共享库ABI兼容性时,但是您可以完全控制它们)。
https://stackoverflow.com/questions/14735977
复制相似问题