是否允许公开引用私有类成员?我知道,以下代码将编译,并且在我使用它时,它在 99% 的情况下都有效。问题是,我确实遇到了一些配置,其中对私有变量的 const 引用返回了错误的数据,即使与 POD 一起使用也是如此。那么,它是否存在一些一般性问题 - 语法错误或其他一些可能失败的情况?使用 const 引用相对于使用 Get() 方法是否有任何性能优势?请参阅以下代码中的注释...从“良好的编码风格”的角度来看,这是如何看待的?“好的实践”怎么样?
自己的研究:嗯,在使用简单数据类型时,更喜欢 const 引用而不是 Get() 方法可能没有性能优势。在使用大型结构时,仅返回一个引用可能很有用。Const ref 可能会破坏良好的 OOP 规则(封装和生命周期)。
但同样,基本问题是:即使在有效(现有)实例上使用,“const int &Width”是否有任何理由失败?从 dll 中导出类 CTest 怎么样?谢谢
class CTest
{
public:
// public reference to a private variable - is this allowed? What about standards, what about 'good coding'?
const int & Width; // read only property
// Is there some performance penalty for GetWidth1() compared to previous reference Width?
/*(inline)*/ int GetWidth1() const { return _width; }
// some performance benefit or disadvantage writting GetWidth2 rather than GetWidth1()?
const int & GetWidth2() const { return _width; }
CTest(int width):
Width(_width), // initialize public reference to a private variable - is this correct?
_width(width) // initialize member variable
{}
private:
int _width;
};
int main()
{
CTest cTest(10);
CTest * pTest = new CTest(10);
int width1 = cTest.Width; // is this possible? Is there some reason (not) to use such a construction?
int width2 = pTest->Width;
int width3 = pTest->GetWidth1(); // of course, correct. But is there some performance penalty compared to pTest->Width?
return 0;
}