【问题标题】:boolean variable has value without initialization?布尔变量在没有初始化的情况下有值?
【发布时间】:2015-06-01 17:57:50
【问题描述】:

我有以下代码sn-p:

ifstream input(aFileName);

bool select;
while (!input.eof())
{
    input >> select;
    cout << select << endl;
    if(select){
    // do something
    }
}

当我运行这段代码时,我发现了以下两个我不明白的地方:

变量select 在执行bool select; 行之后立即具有值1,即显然没有初始化。这怎么可能?

如果提供的信息足够,请告诉我。我当然可以调整这个问题。

【问题讨论】:

标签: c++ boolean ifstream


【解决方案1】:

在处理布尔值时,您应该在初始化变量时始终存储一个默认值。这是堆栈溢出的人解释如果没有默认值可能会发生什么影响:Default value of an unset boolean in C++?

因此,如果您想以 false 开始值,请确保将其初始化为 false 值。

C++

ifstream input(aFileName);

bool select = false; // DEFAULT
while (!input.eof())
{
    input >> select;
    cout << select << endl;
    if(select){
    // do something
    }
}

【讨论】:

  • 不错!感谢您的链接!
  • 没问题,伙计。您可以将其标记为已回答,它可以帮助我解决问题,并帮助其他人查看此答案(如果他们也被卡住了)。 :)
【解决方案2】:

在块范围内定义的未初始化标量变量的值是垃圾。

1 与任何其他垃圾值一样有效。

【讨论】:

  • @Svalbard:你的问题的两个部分是不相关的。您可能想发布一个新问题。
【解决方案3】:

我不确定第 2 点,但对于第 1 点:C/C++ 中未初始化的变量可以具有 any 值。您不应依赖未初始化变量的值。

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 2017-04-22
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多