gpt4 book ai didi

c++:数组中的类成员有多远(以字节为单位)?

转载 作者:可可西里 更新时间:2023-11-01 17:44:57 27 4
gpt4 key购买 nike

我找不到更好的方式来表述我的问题:下面的输出总是正确的吗?这是可移植的吗?

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);

如果 vector 而不是 points 被定义为原始数组会怎么样?输出仍然始终为真吗?

Point *points = new Point[3]; // instead of std::vector<Point> points(3);

最佳答案

对于 std::vector , [vector.overview]/1 (N3337) 说:

The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().

是的,您的程序的行为是可移植的且定义明确。

对于数组,[dcl.array]/1 声明:

An object of array type contains a contiguously allocated non-empty set of N subobjects of type T.

这不像 vector 那样明确引用,但“连续”一词的共同使用表明 std::vector存储标识也适用于阵列。

关于c++:数组中的类成员有多远(以字节为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com