尽管已初始化变量,编译器仍给出未初始化的局部变量错误

compiler gives uninitialized local variable error despite initialized variable

我正在研究 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 中说:

The scope of variable declared in if statement extends from its point of declaration to the end of the statement that the condition controls.

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

我可以

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

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

if 条件内的表达式中

int a = 4 && a != x

编译器实际看到的是

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

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

从 C++17 开始,您可以使用 if-with-initializer 语法来实现您想要的效果

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