当编译时已知引用在结构中采用 space 时,是否错过了优化?
Is it a missed optimization, when a compile-time known reference takes space in a struct?
看这个例子:
struct Foo {
int a;
int &b = a;
};
如果sizeof(Foo)!=sizeof(int)
,是否错过了优化?
我的意思是,编译器能否从结构中删除 b
,因为它始终引用 a
?
有什么可以阻止编译器进行这种转换吗?
(注意,struct Foo
看起来就是这样,没有构造函数等。但是你可以在Foo
周围添加任何东西,这表明这种优化会违反标准)
不,因为您可以使用变量的聚合初始化来使其引用其他内容。
struct Foo {
int a;
int &b = a;
};
int c;
Foo f{7, c};
看这个例子:
struct Foo {
int a;
int &b = a;
};
如果sizeof(Foo)!=sizeof(int)
,是否错过了优化?
我的意思是,编译器能否从结构中删除 b
,因为它始终引用 a
?
有什么可以阻止编译器进行这种转换吗?
(注意,struct Foo
看起来就是这样,没有构造函数等。但是你可以在Foo
周围添加任何东西,这表明这种优化会违反标准)
不,因为您可以使用变量的聚合初始化来使其引用其他内容。
struct Foo {
int a;
int &b = a;
};
int c;
Foo f{7, c};