Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 作为数组访问类成员合法吗?_C++_Undefined Behavior - Fatal编程技术网

C++ 作为数组访问类成员合法吗?

C++ 作为数组访问类成员合法吗?,c++,undefined-behavior,C++,Undefined Behavior,考虑以下代码: struct Point { double x; double y; double z; void setByIndex(int i, double value) { (&x)[i] = value; } }; setByIndex()函数工作正常。但是,我是否可以确定这不是UB(当使用适当的I调用时)?请提供对该标准的参考和解释,好吗?我想它是重复的:作为数组访问类成员是否合法?不,这是未定义的行为我可以确定这不是UB吗您可以确定这是

考虑以下代码:

struct Point {
  double x;
  double y;
  double z;

  void setByIndex(int i, double value) {
      (&x)[i] = value;
  }
};

setByIndex()
函数工作正常。但是,我是否可以确定这不是UB(当使用适当的
I
调用时)?请提供对该标准的参考和解释,好吗?

我想它是重复的:
作为数组访问类成员是否合法?
不,这是未定义的行为<代码>我可以确定这不是UB吗您可以确定这是UB<代码>能否请您提供对标准的参考和解释?索引到结构中是否合法?最重要的是,副本包含所有内容。您正在查找结构元素的位置(地址)。其中一个问题是编译器可以在结构元素之间添加填充(例如,为了对齐目的)。另一个问题是一个结构的元素可以是不同的类型;这使得指针值的计算变得困难。当您有一个指向int的指针时,递增和(指针数学)是基于“int”大小的单位。当int作为一个元素,struct作为下一个元素时会发生什么?@ThomasMatthews我指的是这个特定的例子。我已经明白这是UB。但是我想知道,如果我添加
#pragma pack
以确保没有填充,它会改变吗?如果您想像数组一样访问元素,请使用
std::vector
,而不是
struct
,或者将它们放在结构内部的
vector
中。