c++ - 尽管已初始化变量,编译器仍给出未初始化的局部变量错误
问题描述
我正在研究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)
// ...
但如果可能的话,我想在一行中完成。
解决方案
在if
条件内的表达式中
int a = 4 && a != x
编译器实际看到的是
int a = (4 && a != x)
a
在初始化之前显然使用了值(这就是错误的意思),而不是代码的意图。
从 C++17 开始,你可以使用 if-with-initializer 语法来达到你想要的效果
if (int a = 4; a != x)
// ...
推荐阅读
- python - 在python中计算对向量概率分布的有效方法
- php - XPath 解析成数组
- mongodb - ReactiveMongoRepository / MongoRepository 不返回 _id 字段
- php - 在 Wordpress/WooCommerce 中隐藏继续结帐
- scala - 我需要构建 xgboost4j-spark 还是可以使用 maven repo 中的 jar 文件
- java - Apache Commons FileUpload Stream API 在 Spring 5 中不起作用
- asp.net-core - 如何更新 Microsoft.AspNetCore?
- reactjs - 在 history.replact 之后刷新
- java - 使用 maven 汇编命令查找捆绑到单个 jar 中的资源的路径
- java - 使用 Maven 集成重新运行 JUnit 参数化套件