C++ 类中未定义/未初始化的默认值
假设您有这样一个类:C++ 类中未定义/未初始化的默认值,c++,initialization,undefined,C++,Initialization,Undefined,假设您有这样一个类: class A { public: A () {} A (double val) : m_val(val) {} ~A () {} private: double m_val; }; 创建一个实例后,如何检查m_val是否已初始化/定义? 换句话说,有没有办法知道m_val是否已初始化/定义?我想是Python中定义的操作符。(如果我错了,请纠正我。) 我想通过以下方式修改类和c-TOR: class A { public: A () : define
class A
{
public:
A () {}
A (double val) : m_val(val) {}
~A () {}
private:
double m_val;
};
创建一个实例后,如何检查m_val是否已初始化/定义?
换句话说,有没有办法知道m_val是否已初始化/定义?我想是Python中定义的操作符。(如果我错了,请纠正我。)
我想通过以下方式修改类和c-TOR:
class A
{
public:
A () : defined(false) {}
A (double val) : m_val(val), defined(true) {}
~A () {}
private:
double m_val;
bool defined;
};
你如何评价这个解决方案?有什么建议吗
蒂亚,
Chris在我看来,您应该在所有构造函数中初始化您的成员变量,至少使用一个合理的默认值:
A () : m_val(0.0) {}
A (double val) : m_val(val) {}
我看不出在变量中保留垃圾值有什么好处(除非您打算将它们用作一个非常粗糙的随机数生成器-只是开玩笑而已:-)。这样的垃圾值和额外的标志会使代码复杂化,并且总是需要程序员注意避免错误-而且由于我们是人类,我们的注意力有时会滑落…IMO您应该在所有构造函数中初始化您的成员变量,至少使用一个合理的默认值:
A () : m_val(0.0) {}
A (double val) : m_val(val) {}
我看不出在变量中保留垃圾值有什么好处(除非您打算将它们用作一个非常粗糙的随机数生成器-只是开玩笑而已:-)。这样的垃圾值和额外的标志会使代码复杂化,并且总是需要程序员注意避免错误-而且由于我们是人类,我们的注意力有时会滑落…您需要在默认构造函数中设置一个合理的默认值,否则它的值是未定义的。这基本上意味着它将是一个随机值——可能是0、NaN或2835.23098——除非您显式地设置它,否则无法判断
class A
{
public:
A () : m_val(0.0) {}
A (double val) : m_val(val) {}
~A () {}
private:
double m_val;
};
您需要在默认构造函数中设置一个合理的默认值,否则其值是未定义的。这基本上意味着它将是一个随机值——可能是0、NaN或2835.23098——除非您显式地设置它,否则无法判断
class A
{
public:
A () : m_val(0.0) {}
A (double val) : m_val(val) {}
~A () {}
private:
double m_val;
};
NaN
对我来说是个不错的值,因为它是唯一无法设置的值。但是,如果变量是NaN
,您将如何测试它?@Jir:
定义isnan()。编辑:实际上我现在还不确定C++中的定义和位置(我自己是C个人)。您可以始终返回到值!=value
这仅适用于浮点值为NaN的情况。数值_限制将为您提供有关赋值和检查NaN和无穷大的更多详细信息(尽管如果您知道您使用的是ieee 754,则不需要一半的检查)。太好了!包括
我现在可以将变量初始化为NaN
s,并通过isnan()
检查它们。谢谢大家!NaN
对我来说是个不错的值,因为它是唯一无法设置的值。但是,如果变量是NaN
,您将如何测试它?@Jir:
定义isnan()。编辑:实际上我现在还不确定C++中的定义和位置(我自己是C个人)。您可以始终返回到值!=value
这仅适用于浮点值为NaN的情况。数值_限制将为您提供有关赋值和检查NaN和无穷大的更多详细信息(尽管如果您知道您使用的是ieee 754,则不需要一半的检查)。太好了!包括
我现在可以将变量初始化为NaN
s,并通过isnan()
检查它们。谢谢大家!!嗯,我的注意力特别容易转移!:P谢谢你的评论,我会避免让值未初始化。好吧,我的注意力特别容易转移!:P谢谢你的评论,我将避免让值未初始化。