更新: 我得到真实的原因是因为任何不是 0 的东西都会被认为是真实的,这显然对我在未初始化时变得虚假的可能性有多大意义。
我在 StackOverflow 上阅读了与我的问题类似的帖子,它谈到初始化所有成员变量是一种很好的做法,我同意这一点。帖子:默认情况下,布尔变量并不总是假的?
这篇文章有点旧(9 年前),所以我只是认为在新的 C++ 版本中可能已经改变了一些东西,我目前使用的是 C++17。我还有一个与帖子中讨论的问题略有不同的问题。
我知道,如果一个变量未初始化,它可能包含一些“垃圾数据”,或者正如帖子中的答案之一所说(我认为这就是他们的意思,但我不是 100% 确定),“如果没有明确已初始化——将包含一个任意值。”。
我已经尝试过测试,结果表明当我没有初始化我的变量时,它们包含随机数(对于 int,double)。我还测试了 std::string 但从我所看到的默认情况下它们被设置为“”。
无论如何,现在当我尝试使用内置类型时,bool我总是会得到真实的(在构造类之后,但布尔值再次从未初始化,我会进入调试并看到该值是真实的),我感到困惑的是无论我尝试测试多少次,这是否只是真假中的一个随机值,如果有时它是假的,它总是设置为真。如果未初始化,值不应该是“随机”的吗?为什么它总是设置为 true(再次当我的类的成员变量在构造时未初始化时)。
我尝试过的解决方案: 显然一个只是初始化构造,但我想到了另一个......
如果在构造时我希望它是真的而不是假的,但是当它没有被构造为设置为假时,那么当我有一个指向我的对象的指针向量时,我可以检查我没有在读取未初始化的对象时通过检查该布尔值是否设置为 true(如果已初始化)或 false 来跟踪指针。我将无法使用将构造初始化为 false 的方法 1,也因为如果我们要反转行为,我不能依赖未初始化的布尔成员变量将是什么,正如我在上面的段落中提到的那样不确定由于我得到的结果而导致的行为。我做了以下,它的工作...
class Testing{
private:
bool condition{false} // Initalize it here which kind of makes me confused but it works
public:
Testing() : condition{true} {} // Constructor setting the condition value to true
};
有人可以解释这样做是否是错误的,就我个人而言,我从未见过有人这样做,但我尝试过并且没有给出错误。