数据成员是否形成范围?

fre*_*low 16 c++ iterator stl object-layout c++11

我可以将同一类型的连续数据成员视为范围吗?例如:

struct X
{
    int a, b, c, d, e;
};

X x = {42, 13, 97, 11, 31};

std::sort(&x.a, &x.a + 5);   // kosher?
Run Code Online (Sandbox Code Playgroud)

Pau*_*ans 15

不,这是未定义的行为.你正在对待x.a数组的第一个元素,它不是.可能会在某些实现上工作,也可能会袭击你的冰箱;)

  • 正确,但是`为了这些运算符的目的,指向非阵列对象的指针的行为与指向长度为1的数组的第一个元素的指针相同,其中对象的类型为其元素类型.所以你可以对待它作为指向数组第一个元素的指针,只有长度为1. (2认同)
  • @JesseGood那个引用允许`X*p =&x; ++ p;`指针越过末尾,但不是OP中的指针. (2认同)

Eri*_*c Z 7

不要那样做.编译器可以在结构成员之间(以及最后)添加填充.