有人可以解释一下这个 C++ 符号?

发布于 2024-07-11 06:07:59 字数 180 浏览 12 评论 0原文

if (vector1.x > ((float*)&vector1)[j])

j 只是向量的索引吗?
例如,即使向量不是数组,C++ 是否能够使用数组表示法检索这些值?
如果是这样,我猜它是通过引用向量的地址来实现这一点的?

if (vector1.x > ((float*)&vector1)[j])

Is j simply just an index into the vector?
e.g. is C++ able to retrieve these values using array notation even though vector isn't an array?
If so I'm guessing it achieves this by referencing vector by its address?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨笨の傻瓜 2024-07-18 06:07:59

C++ 标准规定,将 (pods) 结构体的指针转换为其第一个元素类型的指针将产生指向其第一个元素的指针:

struct a {
    float a1;
    float a2;
    float a3;
};

a o1; ((float*)&o1); // points to o1.a1

我怀疑代码告诉编译器不要在 a1、a2 和 a3 之间添加任何填充,这样,如果它索引指针,它将准确地指向它想要的浮点数。 以上

((float*)&o1)[1] // *would* return o1.a2

是平台相关的,因为在标准 C++ 中填充不能更改。 查找该代码如何安排它,以及我是否完全正确:)

The C++ Standard says that casting a (pods) struct's pointer to a pointer of the type of its first element will yield a pointer to its first element:

struct a {
    float a1;
    float a2;
    float a3;
};

a o1; ((float*)&o1); // points to o1.a1

I suspect that code told the compiler not to add any padding between a1, a2 and a3, so that if it indexes the pointer, it will pointer exactly to the float it wants. So above

((float*)&o1)[1] // *would* return o1.a2

That's platform dependent, as padding can't be changed in Standard C++. Lookup how that code arranges it, and whether i'm right at all :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文