首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coords[3]究竟是如何工作的呢?

coords[3]究竟是如何工作的呢?
EN

Stack Overflow用户
提问于 2020-08-06 13:35:33
回答 1查看 112关注 0票数 2

所以我一直在看一些东西,发现了这个线程Aliasing struct and array the C++ way

这就是问题的答案

代码语言:javascript
复制
#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);
}

现在我的问题是我不知道

代码语言:javascript
复制
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}

这个表达式到底定义了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 13:38:54

这个语法是一个pointer to member,本质上是一种将成员存储到变量并检索它的方法。在这样的情况下,当您想循环遍历成员列表时,这是非常有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63284797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档