局部变量在未识别的条件下初始化?

时间:2018-01-15 00:09:22

标签: c++ global-variables local-variables

我正在学习c ++,我在一个程序中遇到了一个非常奇怪的现象。我还没有看到关于这个问题的任何文件。为什么当我在条件语句中初始化变量时,它不能被识别出来?变量是条件语句的本地变量吗?

以下是一个例子:

#include "stdafx.h"
#include <iostream>

using namespace std;
/*scope / range of variables */


int global;

int main()
{
   int local = rand();

   cout << "value of global " << global << endl;
   cout << "value of local " << local << endl;

   int test = 10;

   if (test == 0)
   {
      int result = test * 10;
   }

   cout << "result :" << result << endl;

    return 0;
}

在这种情况下,结果是未定义的。有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所指出的,result的声明是您提供的if()范围中的本地声明:

if (test == 0)
{ // Defines visibility of any declarations made inside
  int result = test * 10;
} //  ^^^^^^

因此声明

cout << "result :" << result << endl;

会导致编译器错误,因为{em}范围之外的result对于编译器是不可见的。

但即使你在范围块之外正确地声明result,你的逻辑

int result = 0; // Presumed for correctness
int test = 10;

if (test == 0)
{
    result = test * 10; // Note the removed declaration
}

没有多大意义,因为test在您的10语句条件中针对值0进行测试之前,会立即给出值if(),而且情况永远不会成真。