相关疑难解决方法(0)

POD结构(相同类型的成员):成员是否位于连续的内存位置?

给定

template <typename T>
struct Vector3d { T x, y, z; };
Run Code Online (Sandbox Code Playgroud)
  • 是否可以安全地假设x,y和z位于连续的内存位置中?

  • 假设for T = float和至少安全T = double吗?

  • 如果不是,是否可以跨平台执行?

注意:只要x,y,z是连续的,我就不介意在z之后填充

c++ struct memory-alignment

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

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

注意:这是对以下问题的后续问题:当编译时已知的引用在结构中占用空间时,这是否是错过的优化?,这表明聚合初始化可以通过将其初始化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
查看次数