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