如果引用的对象在编译时是已知的,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在一个不占用存储空间的类中有没有可能有一个引用?
发布于 2021-05-27 05:15:28
int& rg{glob};这仅定义此引用的默认值。使用聚合初始化,可以将此引用初始化为引用其他对象。因此,这个引用不能(简单地)优化掉。
https://stackoverflow.com/questions/67712803
复制相似问题