在 Java、C# 或 PHP 等编程语言中,我们不能使用未初始化的变量。这对我来说很有意义。
C++ dot com规定未初始化的变量在第一次被赋值之前具有不确定的值。但对于整数情况它是 0?
我注意到我们可以在不初始化的情况下使用它,并且编译器不会显示错误并且代码会被执行。
例子:
#include <iostream>
using namespace std;
int main()
{
int a;
char b;
a++; // This works... No error
cout<< a << endl; // Outputs 1
// This is false but also no error...
if(b == '0'){
cout << "equals" << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试用其他语言(例如 C#)复制上述代码,则会出现编译错误。我在官方文档中找不到任何内容。
我非常重视你的帮助。
Bat*_*eba 11
C++ 给了你搬起石头砸自己脚的能力。
将整型变量初始化为 0 的机器指令通常采用以下形式
REG XOR REG
Run Code Online (Sandbox Code Playgroud)
如果您想将其初始化为其他内容,那么它的存在就不太令人满意。这对于一种自诩最快的语言来说是令人厌恶的。您关于整数初始化为零的断言是不正确的。
在 C++ 中使用未初始化变量的行为是未定义的。
检测或证明在所有情况下都使用未初始化的变量是不可行的,甚至是不可能的。例如:
int a;
if (<complex condition>)
a = 0;
if (<another complex condition>)
a = 1;
++a;
Run Code Online (Sandbox Code Playgroud)
是否存在两个条件都为假的情况?除非您对程序进行广泛的分析,否则您不会知道。可以传递变量指针,可能涉及多线程,这使得分析变得更加困难。因此,决定信任程序员并仅声明这些 UB。
现代编译器可以在许多未初始化变量使用的情况下发出警告,并且您应该始终使用最大警告级别。
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |