相关疑难解决方法(0)

C++标准是否保证未使用的私有字段会影响sizeof?

考虑以下结构:

class Foo {
    int a;
};
Run Code Online (Sandbox Code Playgroud)

用g ++进行测试,我得到了,sizeof(Foo) == 4但标准是否有保证?是否允许编译器注意到这a是一个未使用的私有字段并将其从类的内存中表示中删除(导致较小的sizeof)?

我不希望任何编译器实际上进行那种优化,但这个问题突然出现在语言律师讨论中,所以现在我很好奇.

c++ sizeof language-lawyer

12
推荐指数
1
解决办法
448
查看次数

当编译时已知的引用在非聚合结构中占用空间时,这是错过的优化吗?

注意:这是对以下问题的后续问题:当编译时已知的引用在结构中占用空间时,这是否是错过的优化?,这表明聚合初始化可以通过将其初始化ba对其他变量的引用来代替作为引用的默认初始化。这个问题是关于不可能进行初始化的情况。

请参阅以下示例:

struct Foo {
    int a;
    int &b;

    Foo() : b(a) { }
};
Run Code Online (Sandbox Code Playgroud)

如果错过了优化sizeof(Foo)!=sizeof(int)吗?

我的意思是,编译器可以b从其始终引用的结构中删除它a吗?

有什么阻止编译器进行这种转换的吗?

(请注意,struct Foo看起来是这样。没有其他构造函数,等等。但是您可以在周围添加任何内容Foo,这表明此优化将违反标准。)

c++ struct initialization reference language-lawyer

5
推荐指数
1
解决办法
220
查看次数