假设我有一个简单的 C++ 类,
class Data {
public:
float data[3];
void clear() { data[0] = 0.0f; data[1] = 0.0f; data[2] = 0.0f }
}
和数据的向量,
std::vector<Data> v(10);
可以安全地假设&v[0].data[0]
指向一个包含 30 个浮点数的数组?
从标准
23.3.6.1 类模板向量概述
的元素
向量是连续存储的,这意味着如果 v 是一个向量,其中 T 是其他类型
大于 bool,则对于所有 0
so &v[0]
确实指向10个连续的开始Data
对象。
但对于布局Data
我们有
9.2.13 班级成员
具有相同访问控制(第 11 条)的(非联合)类的非静态数据成员的分配方式如下
后来的成员在类对象中具有更高的地址。非静态数据的分配顺序
具有不同访问控制的成员未指定 (11)。实施调整要求可能
导致两个相邻成员不立即分配;所以可能需要
用于管理虚拟函数(10.3)和虚拟基类(10.1)的空间。
所以我们不能确定sizeof(Data) == 3*sizeof(float)
,因此一般答案应该是:假设 30 个连续浮点数是不安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)