【问题标题】:Is it a missed optimization, when a compile-time known reference takes space in a struct?当编译时已知引用在结构中占用空间时,是否错过了优化?
【发布时间】:2020-01-08 16:41:21
【问题描述】:

看这个例子:

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

如果sizeof(Foo)!=sizeof(int),是不是错过了优化?

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

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

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

【问题讨论】:

标签: c++ struct reference initialization language-lawyer


【解决方案1】:

不,因为您可以使用变量的聚合初始化来让它引用其他东西。

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

int c;
Foo f{7, c};

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2014-08-10
    • 2012-05-30
    • 2013-08-06
    相关资源
    最近更新 更多