指示双值尚未初始化的最佳方法是什么?

Coo*_*der 0 c++ null

我有一个类CS,它代表3D中的坐标系,即(x,y,z)

class CS
{
  private:
        double x;
        double y;
        double z;
}

CS::CS()
{
   x = NULL;//this causes x = 0//i want the address of x to be 0x000000 & not x = 0
   y = NULL;
   z = NULL:
}
Run Code Online (Sandbox Code Playgroud)

我希望用户可以创建一个CS(0,0,0).在构造函数中,我想将x,y和z的地址初始化为NULL.这是为了区分用户定义的(0,0,0)和默认值.我正在动态创建CS的对象,因此使用以下代码没有意义:

class CS
{
  private:
        double *x;
        double *y;
        double *z;
}

CS:CS()
{
    x = new double;
    x = NULL;
    //same for y & z
}
Run Code Online (Sandbox Code Playgroud)

首先,我想手动为任何变量(int或double或char)分配0x000000地址而不使用指针.有什么建议?

Moo*_*uck 13

您不能将x,y和z的位置更改为NULL,因为位置始终是CS对象的偏移量.它们将永远存在.这并不是说CS有一个x像你这样有车,就好像CS有一个x像你这样有头.你不能不会有头部.如果它们是整数,你将不得不使它们成为指针(就像你说你不想做的那样),因为这将是从初始化中告知未初始化的唯一方法.但是,doubles具有很少使用的魔术值:

CS:CS()
: x(std::numeric_limits<double>::quiet_NaN())
: y(std::numeric_limits<double>::quiet_NaN())
: z(std::numeric_limits<double>::quiet_NaN())
{ }
Run Code Online (Sandbox Code Playgroud)

用户可能不会将x,y和z设置为(非数字).