Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类中未定义/未初始化的默认值_C++_Initialization_Undefined - Fatal编程技术网

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谢谢你的评论,我将避免让值未初始化。