首页 > 解决方案 > 当编译时已知引用在结构中占用空间时,是否错过了优化?

问题描述

看这个例子:

struct Foo {
    int a;
    int &b = a;
};

如果 ,它是错过的优化sizeof(Foo)!=sizeof(int)吗?

我的意思是,编译器可以b从结构中删除,因为它总是指的是a

有什么东西可以阻止编译器进行这种转换吗?

(注意,struct Foo看起来是这样。没有构造函数等。但是你可以在 周围添加任何东西Foo,这表明这种优化会违反标准)

标签: c++structreferenceinitializationlanguage-lawyer

解决方案


不,因为您可以使用变量的聚合初始化使其引用其他内容。

struct Foo {
    int a;
    int &b = a;
};

int c;
Foo f{7, c};

推荐阅读