为什么C ++引用会耗尽结构中的内存?

时间:2018-07-01 19:56:51

标签: c++ struct reference

考虑以下程序:

#include <stdio.h>

struct A
{
    int x;
};

int main()
{
    printf("%d\n", sizeof(A));
    return 0;
}

按预期,此程序将打印数字4,因为A中的整数使用4个字节。但是,让我们将程序更改为:

#include <stdio.h>

struct A
{
    int  x;
    int& r = x;
};

int main()
{
    printf("%d\n", sizeof(A));
    return 0;
}

现在程序将打印数字16

一直有人告诉我,C ++中的引用就像别名一样,就像为同一变量提供另一个名称一样。因此,我希望该结构仍具有4个字节的大小,因为引用r只是x的另一个名称,在编译时它将被实际的变量x取代。 / p>

很奇怪,事实并非如此。相反,似乎引用占用的内存与指针占用的内存一样多。如果将int& r = x;更改为int* p = &x;,程序还将打印16。在我看来,这没有任何意义,因为为什么要像引用一样占用内存,为什么还要有引用,所以我们可能只使用指针。

我用以下代码又做了一个测试程序:

#include <stdio.h>

struct A
{
    int  x;
    int  y;
    int  z;
    int& X = x;
    int& Y = y;
    int& Z = z;
};

int main()
{
    printf("%d\n", sizeof(A));
    return 0;
}

上面的程序将打印40。在我看来,这很奇怪,因为3个整数每个应该占用4个字节,总共12个字节,剩下28个字节供参考。但是28不能被3整除。

我已经使用x64配置的Visual Studio 2015对此进行了编译。

所以我的问题是:我在这里做错了什么,还是为什么C ++引用会耗尽结构中的内存?

0 个答案:

没有答案