プライベートクラスのメンバーへのパブリック参照は許可されていますか?次のコードはコンパイルされ、私が使用していたので、99%のケースで機能しました。問題は、PODを使用している場合でも、プライベート変数へのconst参照が間違ったデータを返すという構成に実際に遭遇することです。それで、それにいくつかの一般的な問題があります-間違った構文、またはそれが失敗する可能性がある他の場合ですか?Get()メソッドを使用するのに対してconst参照を使用すると、パフォーマンス上の利点はありますか?次のコードのコメントを参照してください...これは「優れたコーディングスタイル」の観点からどのように見られますか?「良い実践」はどうですか?
独自の調査:単純なデータ型を使用する場合、Get()メソッドではなくconst参照を優先するパフォーマンス上の利点はおそらくありません。大きな構造体を使用する場合は、参照だけを返すと便利な場合があります。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;
}