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

AMA*_*AMA 5 c++ struct memory-alignment

给定

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之后填充

eer*_*ika 4

假设 x、y 和 z 位于连续的内存位置是否安全?

从技术上讲,该语言没有这样的保证。

另一方面,它们也没有必要不连续,而且在实践中它们很可能是连续的。

如果没有,是否可以跨平台方式强制执行?

保证对象位于连续内存位置的跨平台方法是数组:

template <typename T>
struct Vector3d { T components[3]; };
Run Code Online (Sandbox Code Playgroud)

数组还使得使用指针算术来迭代对象变得合法。