gpt4 book ai didi

c++类返回指向要用作数组的成员的指针

转载 作者:行者123 更新时间:2023-11-28 02:39:56 25 4
gpt4 key购买 nike

class vector3
{
private:
float x;
float y;
float z;
public:
vector3( float x, float y, float z ) : x(x), y(y), z(z) {}
// returning pointer to first member to use it as array.
// assumes that data layout is sizeof(float) by sizeof(float) by sizeof(float)
// and their order is not changed.
float* ptr() { return &x; }
// implicit casting version of ptr()
operator float*() { return ptr(); }

};

...

vector3 v(1,2,3);
float x = v[0];
float y = v[1];
float z = v[2];

它在任何平台和任何编译器设置上都有效吗?我发现它在 visual studio 2013 下正常工作,但我觉得这是非常错误的。

最佳答案

你的感觉是对的。

但这有什么意义呢?为什么你不只拥有一个数组成员而不是 3 个单独的 float 成员?

class vector3
{
private:
std::array<float, 3> data;
public:
vector3( float x, float y, float z ) : data( {x, y, z } ) {}
float* ptr() { return data.data(); }
operator float*() { return ptr(); }
};

这使用 C++11,但您可以使用 C++03 实现相同的目的:

class vector3
{
private:
float data[3];
public:
vector3( float x, float y, float z )
{
data[0] = x;
data[1] = y;
data[2] = z;
}
float* ptr() { return data; }
operator float*() { return ptr(); }
};

当然,最大的问题是:为什么不直接使用 std::vectorstd::array?您的类(class)似乎在重新发明轮子。

关于c++类返回指向要用作数组的成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com