所以我一直在看一些东西,发现了这个线程Aliasing struct and array the C++ way
这就是问题的答案
#include <math.h>
struct Point {
double x;
double y;
double z;
};
double dist(struct Point *p1, struct Point *p2) {
constexpr double Point::* coords[3] = {&Point::x, &Point::y, &Point::z};
double d2 = 0;
for (int i=0; i<3; i++) {
double d = p1->*coords[i] - p2->*coords[i];
d2 += d * d;
}
return sqrt(d2);
}现在我的问题是我不知道
constexpr double Point::* coords[3] = {&Point::x, &Point::y, &Point::z};应该做的..。
我理解constexpr使它成为一个在编译时定义的常量,而double显然是使用的,因为结构包含双数,但是Point::*和{&Point::x, &Point::y, &Point::z};使我感到困惑。首先,什么是Point::*?我想这意味着它是一种指针,但是它指向了什么?这些地址是什么{&Point::x, &Point::y, &Point::z}?
这个表达式到底定义了什么?
发布于 2020-08-06 13:38:54
这个语法是一个pointer to member,本质上是一种将成员存储到变量并检索它的方法。在这样的情况下,当您想循环遍历成员列表时,这是非常有用的。
https://stackoverflow.com/questions/63284797
复制相似问题