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
中。