Rob*_* F. 4 c++ constructor reference class const-cast
在任何人说任何事情之前我都知道这可能不推荐,但我仍然很好奇,如果有更好的方法去做,或者理由不仅仅是因为这是一件奇怪的事情.
我开始研究这个因为我想在类中直接使用语义命名的成员访问数组的元素,同时仍然能够遍历数组而不必调用/创建一些getter或setter方法.
我有一个看起来像这样的类定义.
class Vertex{
public:
Vertex(float x,float y,float z,float w);
float v[4];
float &x,&y,&Z,&w;
};
Run Code Online (Sandbox Code Playgroud)
和一个看起来像这样的构造函数.我的问题是.有没有更好的方法来做我在构造函数中做的事情?
Vertex::Vertex(float vx,float vy,float vz,float vw):
x(*const_cast<float*>( &this->v[0] )),
y(*const_cast<float*>( &this->v[1] )),
z(*const_cast<float*>( &this->v[2] )),
w(*const_cast<float*>( &this->v[3] ))
{
v[0]=vx;
v[1]=vy;
v[2]=vz;
v[3]=vw;
}
Run Code Online (Sandbox Code Playgroud)
我是个白痴......你可以像乔纳森威克利所说的那样做.
x(v[0])
Run Code Online (Sandbox Code Playgroud)
我想在尝试之前我还有其他一些问题.那好吧.
Vertex::Vertex(float vx,float vy,float vz,float vw):
v { vx, vy, vz, vw },
x(v[0]),
y(v[1]),
z(v[2]),
w(v[3])
{
}
Run Code Online (Sandbox Code Playgroud)
我在这里避免写参考成员.原因是引用成员阻止了默认(编译器生成的)复制/赋值特殊成员.
class Vertex{
public:
Vertex(float x,float y,float z,float w)
: v { x, y, z, w } { }
float &x() { return v[0]; }
float &y() { return v[1]; }
float &z() { return v[2]; }
float &w() { return v[3]; }
float const &x() const { return v[0]; }
float const &y() const { return v[1]; }
float const &z() const { return v[2]; }
float const &w() const { return v[3]; }
private:
float v[4];
};
Run Code Online (Sandbox Code Playgroud)