c++ - 使用 clang++ 和 g++ 在 C++ 中进行变量初始化
问题描述
我很难理解这个由两个不同编译器编译的简单示例发生了什么:
#include <iostream>
using namespace std;
int main()
{
double x;
cout << x << endl;
x += 1.0;
cout << x << endl;
return 0;
}
用 g++ 编译它给出
0
1
在使用 clang++ 编译时,它给出了
6.95279e-310
1
我确信这是我缺乏理解,但任何理解这种行为的提示将不胜感激。重新分配时是否从 clang++ 设置生成编译代码x = 0
,但在显示时不是cout
?这是预期的行为吗?
问题:是否应该因为这些差异而始终初始化变量?C ++中的常见做法是什么?
解决方案
您正在经历的是未定义的行为。在 C++ 中,变量不会为您初始化。
您的程序的输出可能因编译器而异,如果您多次运行它或在不同的机器上运行它,它甚至可能会改变它的结果。
启用了 SDL 检查的 Visual Studio 2019 甚至无法编译它。
所以是的,您应该始终在使用变量之前对其进行初始化。
推荐阅读
- java - UnityException:找不到合适的 JDK 安装
- java - 在 Spring 中的 @Transactional 方法期间处理异常
- kubernetes - Kubernetes Kubectl exec 是如何工作的以及如何解决它
- android - SearchView 触发 SearchActivity 的两个 Intent
- android - 如何在android中为fab实现单页菜单
- angular - Angular 4 - 即时将文本字段值转换为大写
- google-maps - 什么是我可以用于我的项目并适用于 ios 和 android 的最可靠的反应原生地图库
- java - 如何解决 JLS3 无法解决或不是 Eclipse 中的字段错误?
- javascript - 如何使用 Enzyme 测试嵌套的连接组件?
- c# - 如何在 cdev 中调用 OpenFileDialog 和 FolderBrowserDialog