在相同类型的数组成员之后对齐
Alignment after array member of same type
在结构体/类的常见情况下,成员之间可能存在对齐填充。但是我想知道是否可以这样假设:
template<typename T, size_t N>
struct MyStruct {
T data[N];
T term;
constexpr MyStruct();
};
将可靠地等价于:
template<typename T, size_t N>
struct MyStruct {
T data[N+1];
constexpr MyStruct();
};
问这个问题的原因是我真正想要的是能够在constexpr构造函数中显式初始化数组的最后一个成员(但我不关心其余的)。例如,对于顶部MyStruct,我可以这样做:
template<typename T, size_t N>
constexpr MyStruct<T,N>::MyStruct() : data{}, term{0} {}
但是我希望结果与如果term是数组的最后一个元素相同。
这安全吗?如果没有,是否有一种方法可以使用MyStruct的第二种形式来实现同样的事情?
假设在你的数据[N]和你的term变量之间没有差距是绝对不安全的。例如,您可以显式地控制Microsoft编译器如何将变量对齐到n字节边界(其中n为1、2、4、8或16),参见http://msdn.microsoft.com/en-us/library/xh3e3fd0(v=vs.80).aspx.
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 将C++浮点数组成员直接封送到 C#,而无需复制
- 用于对项目进行分组并将单个项目映射到其他组成员的数据结构
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- C++内联数组成员统一初始化
- 有没有办法把字符串数组成员放在".structurevariable"前面?
- C++ 在具有数组成员的类上无效指针/双精度释放
- 将初始化列表传递给 C++ 中的数组成员
- 具有灵活数组成员的结构的大小
- 初始化固定的 C 数组成员结构
- 带有布尔数组成员的 C++ 结构.如何在主代码中使用
- 将元组成员包装在其他模板化类型中
- 我如何通过构造函数大小私人std ::数组成员
- 通过两个下标访问数组成员
- 分段错误发生在索引离开C++数组边界之后
- size_t结构非数组成员崩溃的强制转换
- 标准::元组成员逐个成员比较失败
- 在相同类型的数组成员之后对齐