首页 > 解决方案 > 是否可以定义一个引用变量不占用额外存储空间的类?

问题描述

如果引用的对象在编译时已知,C++ 可以选择不为引用变量分配存储空间。这里的其他问题已经指出,对常量的引用不占用存储空间。

那么为什么 C++ 在以下情况下不执行不为引用变量分配存储的明显优化呢?rg只能引用glob,那为什么要为指针分配存储空间呢?


struct nowtref 
{
    int x;
};

int glob;

class withref
{
    int x;
    int& rg{glob};
};

int main(int argc, char* argv[])
{
    printf("sizeof(withref) = %lu\n", sizeof(withref));
    printf("sizeof(nowtref) = %lu\n", sizeof(nowtref));
}

运行时,该程序打印:

sizeof(withref) = 16
sizeof(nowtref) = 4

是否可以在不占用存储空间的类中进行引用?

标签: c++reference

解决方案


int& rg{glob};

这仅定义此引用的默认值。使用聚合初始化可以初始化此引用以引用其他对象。因此,这个引用不能(简单地)优化掉。


推荐阅读