2

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

仅作为类成员引用,程序给出的 ao/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
4

1 回答 1

4

[expr.sizeof]

2 当应用于引用或引用类型时,结果是被引用类型的大小。当应用于一个类时,结果是该类的对象中的字节数,包括将该类型的对象放入数组中所需的任何填充。

sizeofa 引用将返回所引用对象的大小,在这种情况下相当于sizeof(ref)sizeof(int)在您的平台上是 4。

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

于 2015-06-10T02:35:03.777 回答