编译器给出未初始化的局部变量错误



我正在学习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的c++编程语言中说:

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

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

I can do

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)
// ...

最新更新