类成员在数组中的距离(以字节为单位)
c++: How distant(in bytes) are class member in an array?
我没有找到更好的方法来表达我的问题,像这样:下面的输出总是为真吗?这是便携式的吗?
struct Point
{
int x;
int y;
};
//...
std::vector<Point> points(3);
unsigned char* start = (unsigned char*)(&points[0]);
unsigned char* end = (unsigned char*)(&points[1]);
std::cout << "is this the same ? " << std::distance(start,end) == sizeof(Point);
如果将points
定义为原始数组而不是vector
会怎样?输出仍然总是为真吗?
Point *points = new Point[3]; // instead of std::vector<Point> points(3);
对于std::vector
,概览]/1 (N3337)说:
一个向量的元素是连续存储的,这意味着如果
v
是vector<T, Allocator>
,而T
不是bool
,那么对于所有0 <= n < v.size()
,它都遵循&v[n] == &v[0] + n
的标识。
所以,是的,你的程序的行为是可移植的和定义良好的。
对于数组,[dcl。数组)/1:
数组类型的对象包含一个连续分配的
N
类型的T
子对象的非空集合。
这并不像vector
引号那样明确,但是"连续"一词的共同使用表明,std::vector
存储标识也适用于数组。
是的,vector的一个要求是其元素必须连续存储。
从n2798:23.2.6类模板vector [vector]1 vector是支持随机访问的序列容器迭代器。此外,它支持(平摊)常数时间插入最后进行擦除操作;插入和删除在中间采取线性时间。存储管理通过提示自动处理可以给予提高效率。向量的元素是连续存储,意思是如果v是一个向量,其中T是输入bool以外的类型,则遵循标识符&v[n] == &v[0] + n对于所有0 <= n
相关文章:
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 获取嵌套 stl 容器的大小(以字节为单位)
- 常量"C"占用的空间(以字节为单位)
- C++ 中 STL 中迭代器的大小(以字节为单位)是多少
- 有人知道可以使用 c++ 以字节为单位编码 asm 字符串的任何东西吗?
- 如何以字节为单位计算mpz_class的长度?
- 获取C++模板参数包的总大小(以字节为单位)
- C++/C:Char[]的前缀长度(以字节为单位)(二进制/十六进制)
- visual 在指向缓冲区(字符串 " ")的空指针上使用 sizeof() C++ 以获得以字节为单位的大小?
- 如何获得以字节为单位的UTF-16LE字符串的大小
- 为什么 C/C++ "Hello World" 以千字节为单位?
- C++字符串长度(以字节为单位)
- 解码像 FAST 这样的数据协议的快速方法是什么,其中数据以字节为单位编码,并将位作为存在标志
- 解压缩加密文件(以字节为单位)
- 在 boost::multi_array 中以字节为单位表示步幅
- 省略号函数参数的大小(以字节为单位)
- C++获取EOL的大小(以字节为单位)
- 在openMPI中向进程发送数据(以字节为单位)的最佳方式
- 获取矢量的大小(以字节为单位)
- 如何将数组限制在特定的大小(以千字节为单位)