仅作为 class 成员的参考给出整数大小为 8

Reference as a only class member gives size 8 for integer

我在编写一个小的 c++ 程序来测试作为 class 成员的引用时遇到了这种情况。

仅作为 class 成员引用,程序给出的 o/p 为 8。 通常参考将大小作为它们所属的特定数据类型。但为什么这里是 8(而不是 4)。请帮助我理解它。

#include<iostream>
using namespace std;

class Test {
    int &t;
public:
    Test(int &t):t(t) {}
};

int main()
{
    int x = 20;
    Test t1(x);
    int &ref = x;
    cout<<sizeof(ref)<<endl;
    cout<<sizeof(t1)<<endl;
    return 0;
}

输出 -

/home/user>./a.out
4
8

[expr.sizeof]

2 When applied to a reference or a reference type, the result is the size of the referenced type. When applied to a class, the result is the number of bytes in an object of that class including any padding required for placing objects of that type in an array.

sizeof 引用将 return 引用对象的大小,在 sizeof(ref) 的情况下,这相当于 sizeof(int),这在您的平台上是 4.

另一方面,您的 class 需要存储对 int 的引用,该标准没有指定实现应如何实现这一点,但它们通常(如果不是普遍的话)存储为幕后指点。 sizeof(int*) 在你的平台上大概是 8,但是细节并不重要,你只需要知道 sizeof(Test) 是 8.