32 ビット マシンでは、sizeof
double への参照であっても常に 4 バイトの参照が取得されます。では、この 4 バイトには実際に何が格納されるのでしょうか。
編集 :
class A{
public:
double& a;
};
int main(){
cout << sizeof(A) << endl; // this will print out 4
}
ベストアンサー1
標準はsizeof
(C++11、5.3.3/4) でかなり明確です。
参照または参照型に適用すると、結果は参照される型のサイズになります。
したがって、実際に を取る場合sizeof(double&)
、コンパイラは がsizeof(double)
4 であることを通知します。
アップデート:つまり、実際に行っているのはクラス型への適用ですsizeof
。その場合、
クラスに適用すると、結果はそのクラスのオブジェクト内のバイト数になります [...]
したがって、内部に参照が存在すると、A
4 バイトを占めることがわかります。これは、標準では参照の実装方法を規定していないにもかかわらず、コンパイラが何らかの方法で参照を実装する必要があるためです。これは、コンテキストによって大きく異なる可能性がありますが、クラス型の参照メンバーの場合、意味のある唯一のアプローチは、double*
背後でこっそりと を組み込み、それを と呼ぶことですdouble&
。
したがって、アーキテクチャが 32 ビット (ポインターの長さが 4 バイト) の場合、結果は説明できます。
ただ覚えておいてほしいのはコンセプト参照は特定の実装に縛られません。標準では、コンパイラが参照を好きなように実装できます。