sizeof引用因类类型和数据成员而异

时间:2016-12-27 23:03:34

标签: c++

#include <iostream>

using namespace std;

class Test
{
double &num1;
public:
Test(double &num2):num1(num2)
    {
        cout<<sizeof(num1);//Prints 8
    }
};

 int main()
{
    double num1=10;
    Test t(num1);
    cout<<sizeof(t);//Prints 4
    return 0;
}

为什么sizeof()在为数据成员打印时和为对象打印时给出此结果?

5 个答案:

答案 0 :(得分:2)

sizeof(t) sizeof(Test)double&加上任何填充的大小。在您的系统上,显然,存储的引用占用了4个字节,并且没有使用此类型的填充。

sizeof(num1)sizeof(double),因为当您命名引用时会发生什么:您实际上是引用引用的对象。

答案 1 :(得分:2)

sizeof在应用于引用时返回引用类型的大小。这意味着在第一种情况下它返回sizeof(double)。在第二种情况下,它返回类的大小,该类仅存储引用。

答案 2 :(得分:2)

来自http://en.cppreference.com/w/cpp/language/sizeof

  

应用于引用类型时,结果是引用类型的大小。

sizeof(num1)sizeof(double)

sizeof (Test)是需要存储引用的地方,在您的情况下可能等同于sizeof (double*)

答案 3 :(得分:2)

num1是一个参考,因此sizeof(num1)给出了所引用对象的大小 - 这里是double

sizeof(T)返回类的大小,而不是类成员可能引用的任何对象的大小。在这种情况下,类大小可能反映了引用被实现为double的32位地址的事实。这是该语言没有说明的实现细节。

答案 4 :(得分:1)

您的类只是存储引用 - 因此编译器知道4个字节就足够了