给定
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之后填充
注意:这是对以下问题的后续问题:当编译时已知的引用在结构中占用空间时,这是否是错过的优化?,这表明聚合初始化可以通过将其初始化b为a对其他变量的引用来代替作为引用的默认初始化。这个问题是关于不可能进行初始化的情况。
请参阅以下示例:
struct Foo {
int a;
int &b;
Foo() : b(a) { }
};
Run Code Online (Sandbox Code Playgroud)
如果错过了优化sizeof(Foo)!=sizeof(int)吗?
我的意思是,编译器可以b从其始终引用的结构中删除它a吗?
有什么阻止编译器进行这种转换的吗?
(请注意,struct Foo看起来是这样。没有其他构造函数,等等。但是您可以在周围添加任何内容Foo,这表明此优化将违反标准。)