我正在学习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)
// ...