首页 > 解决方案 > 尽管已初始化变量,编译器仍给出未初始化的局部变量错误

问题描述

我正在研究C++中的条件声明主题并面临以下问题。

#include <iostream>
int main() {
  int x;
  std::cin >> x;
  if(int a = 4 && a != x) {
    std::cout << "Bug fixed!" << std::endl;
  }
}

我声明然后初始化变量a。在Bjarne Stroustrup Ed.2011 的 The C++ Programming Language 中,据说:

if 语句中声明的变量的范围从其声明点延伸到条件控制的语句的末尾。

这就是我所做的,我声明并初始化了变量a,但是当我尝试将它与 进行比较时x,编译器给出了uninitialized local variable a used错误。为什么,有什么问题?

我可以

int a = 4; 
if (a != x)
  // ...

但如果可能的话,我想在一行中完成。

标签: c++if-statementinitialization

解决方案


if条件内的表达式中

int a = 4 && a != x

编译器实际看到的是

int a = (4 && a != x)

a在初始化之前显然使用了值(这就是错误的意思),而不是代码的意图。

从 C++17 开始,你可以使用 if-with-initializer 语法来达到你想要的效果

if (int a = 4; a != x)
  // ...

推荐阅读