类中未定义/未初始化的默认值

时间:2010-06-01 09:32:17

标签: c++ initialization undefined

我们假设您有这个课程:

class A
{
public:
  A () {}
  A (double val) : m_val(val) {}
  ~A () {}
private:
  double m_val;
};

创建A的实例后,如何检查m_val是否已初始化/定义? 换句话说,有没有办法知道m_val是否已被初始化/定义?我想,在Python中defined运算符的行。 (但如果我错了,请纠正我。)

我想到了以下方式修改类和c-tors:

class A
{
public:
  A () : defined(false) {}
  A (double val) : m_val(val), defined(true) {}
  ~A () {}
private:
  double m_val;
  bool defined;
};

您如何评价此解决方案?有什么建议吗?

TIA, 克里斯

2 个答案:

答案 0 :(得分:4)

您需要在默认构造函数中设置合理的默认值,否则其值是未定义的。这基本上意味着它将是一个随机值 - 可以是0,NaN或2835.23098 - 除非你明确地设置它,否则无法判断。

class A
{
public:
  A () : m_val(0.0) {}
  A (double val) : m_val(val) {}
  ~A () {}
private:
  double m_val;
};

答案 1 :(得分:2)

IMO你应该只在所有构造函数中初始化你的成员变量,至少有一个合理的默认值:

A () : m_val(0.0) {}
A (double val) : m_val(val) {}

我认为在变量中保留垃圾值没有任何好处(除非您打算将它们用作非常粗略的随机数生成器 - 只是开玩笑:-)。这样的垃圾值和额外的标志使代码复杂化,并且总是需要程序员注意以避免错误 - 而且因为我们是人类,我们的注意力有时会滑落......