C ++ bool没有被初始化

时间:2014-11-10 01:14:03

标签: c++ while-loop text-files

Bellow是一个简单的程序,用于检查某个文本文件,以查看其中是否存在单词(在本例中为名称)。

我一直在弹出一个声明“正在使用变量'NamePresent'而没有被初始化。”是不是将NamePresent初始化为bool?

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream NameFile("Names.txt");   
    std::string Name;
    bool NamePresent;

    std::cin >> Name;

    while(NameFile >> Name)
    {
        if(NamePresent == true)
        {
            std::cout << "This works!" << std::endl;
        }
        if(NamePresent == false)
        {
            std::cout << "Nope!" << std::endl;
        }
    }

return 0;
}

4 个答案:

答案 0 :(得分:3)

不,它被宣布为布尔。您仍然需要为其指定值true或false:

bool NamePresent = false;

答案 1 :(得分:2)

“已初始化”表示使用初始化。

bool NamePresent = false;

在上面的代码中,声明bool,但未初始化。此外,您的代码中没有其他语句为NamePresent分配值(但可能您正在努力)。

答案 2 :(得分:2)

如果程序试图使用未初始化的变量( 未初始化) ,任何体面的编译器都会向我们发出警告。

  

test.cpp:在函数'int main()'中:test.cpp:15:9:警告:   'NamePresent'可以在此函数中未初始化使用   [-Wmaybe-未初始化]            if(NamePresent == true)            ^

您应该仔细注意编译器消息。

答案 3 :(得分:2)

变量的生命中有4个重要时刻:

  1. 声明
  2. 在此步骤中,您将通知编译器有关变量类型的信息。这是必需的,以便编译器知道如何解释内存中的数据,例如。

    1. 定义
    2. 这是&#34;诞生&#34;变量。如果在声明中指定了其名称和类型,则在此指示编译器为其分配内存。请注意,int a;之类的语句既是声明又是定义,因为它引入了新名称(a)并为int变量分配内存。

      1. 初始化
      2. 定义变量时,会为其保留一些内存。变量的初始值是该内存的内容,可以是任何内容(通常称为垃圾)。因此,您需要为变量分配第一个有用的值。当然,您可以在不将其初始化为值的情况下使用它,但此 容易出错,因为您无法依赖该变量的值。编译器知道这一点并给你一个警告。请注意,如果在循环或条件分支中初始化变量,则会收到警告,因为条件可能不为真或循环可能未执行。

        1. 死亡
        2. 虽然这一点对你的问题没有实际用处,但值得记住。变量在超出范围时(通常在已定义的指令块结束时,如果它是局部变量,并且当程序结束时,如果它是全局变量),则消失。 / p>