非初始化的本地炭的行为
Behavior of uninitialized local char?
本文关键字:初始化 更新时间:2023-10-16
如果您说的是一个非初始化的本地 int
,则它会得到一个不确定的值,但是如果您有局部char
变量,那是否也不具有未定义值?当然0可能是那个未定义的值,但是我想知道char是否有不同,因为我发现的所有相关信息均与int
有关,而下面的程序仅在Char变量施放为INT时输出0。我使用的GCC 4.7没有标志。
int main()
{
char test1;
int test2;
std::cout<<test2; //garbage
std::cout<<std::endl;
std::cout<<(int)test1; //0
return 0;
}
非初始化的意思是真正的非初始化。仅仅因为您在特定时间始终在上获得特定的价值,并不意味着在所有机器上始终都是这种情况。
您可以通过倾倒函数的汇编代码并进行检查。
如果您说的是一个不可分化的本地int,则它会获得不确定的值
不,这不是考虑它的正确方法。您的本地变量没有获得未定义的值,它没有任何值。随后查询这种非初始化的变量invokes 不确定的行为。
您的程序不一定打印" 0"。它不一定要打印任何数字,甚至完全是。在典型的计算机上使用典型的编译器,您的程序将打印一些数字,但是在C 语言的范围内,我们无法对您的程序会做什么或不做任何事情进行任何> 。
本地变量从当时占据的堆栈空间中的任何随机数据获取其初始值。不能保证空间包含零。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 在函数内部的声明中初始化数组,并在外部使用它
- 继承:构造函数,初始化C++11中基类的类C数组成员