C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
我在类中声明了一个布尔变量bool abc;,并认为默认情况下它是假的.我的程序中的if条件if (abc)结果为true,所以我输出abc的值,并看到它包含值55.这是正常的吗?我们是否总是要指定'bool abc = false'以确保它是假的?
我想知道在解决代码问题时遇到的一个神秘问题.
生产中存在的代码具有未初始化的布尔变量,并且库正在检查此布尔值.在LIVE站点中,此变量的行为始终为TRUE.开发环境中的相同代码始终表现为FALSE.
我知道,由于LIVE和DEV之间的环境差异,未初始化的bool变量可能具有未定义的值.
但这是我的问题.
如果我在代码中放入一个日志语句,编译它并将二进制文件放在开发环境中,bool变量总是为TRUE,而对于LIVE中的代码则为FALSE.
日志语句如何影响未初始化的bool变量的值?我想知道可能性.
如果我有:
int array[20];
Run Code Online (Sandbox Code Playgroud)
array[0]如果还没有在那里进行任何初始化,那么它的价值是多少?有没有办法检查它是否已初始化?
为什么打印32767(或其他随机数)?什么是std::cout印刷品?为什么不NULL(或0)?
int main()
{
int a;
std::cout << a;
}
Run Code Online (Sandbox Code Playgroud) #include <iostream>
using namespace std;
int main() {
bool *a = new bool[10];
cout << sizeof(bool) << endl;
cout << sizeof(a[0]) << endl;
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
delete[] a;
}
Run Code Online (Sandbox Code Playgroud)
以上代码输出:
1
1
112 104 151 0 0 0 0 0 88 1
Run Code Online (Sandbox Code Playgroud)
最后一行应该包含垃圾值,但为什么它们不是全部为0或1?堆栈分配的数组也会发生同样的事情.
解决:我忘了sizeof计算字节数,而不是像我想象的那样.