C+中的基元类型+;C中的vs 在C++中,具有原始类型( int >代码>双 > char < /C> >……未定义如此未定义的行为。基元类型没有默认值,因为它们没有构造函数。但是,当没有上下文时,编译器会一致地给出默认值(0):
在这里,相同的编译,但每次都会产生不同的结果:C+中的基元类型+;C中的vs 在C++中,具有原始类型( int >代码>双 > char < /C> >……未定义如此未定义的行为。基元类型没有默认值,因为它们没有构造函数。但是,当没有上下文时,编译器会一致地给出默认值(0):,c++,gcc,compiler-construction,C++,Gcc,Compiler Construction,在这里,相同的编译,但每次都会产生不同的结果: 21898, 22075, 22020, 21906, ... 未定义原语变量的gcc实现是什么 更奇怪的是,与C相比,我可以 #include <stdio.h> int main(){ int i; printf("%i\n",i); } #包括 int main(){ int i; printf(“%i\n”,i); } 并且编译器总是一致,默认值为0。因此,相同的编译器,但对于相同的基
21898, 22075, 22020, 21906, ...
未定义原语变量的gcc实现是什么
更奇怪的是,与C相比,我可以
#include <stdio.h>
int main(){
int i;
printf("%i\n",i);
}
#包括
int main(){
int i;
printf(“%i\n”,i);
}
并且编译器总是一致,默认值为0
。因此,相同的编译器,但对于相同的基元类型,不同的语言会给出不同的结果。我很想知道C++库是如何处理非定义的原始变量的。
<> C++中的C VS中的原始类型有什么不同?我不是在问UB,而是问在这两种语言中如何定义这些类型以及它们之间的区别
编译器在给定默认值(0)时是一致的
也许吧,但这是你不能依赖的
未定义原语变量的gcc实现是什么
如果不查看源代码并跟踪执行以了解在特定情况下会发生什么(优化标志、编译器版本、输入代码…),很难说
编译器始终保持一致,默认值为0
尝试在周围添加代码,您可能也能看到C的“随机”值
因此,相同的编译器,但对于相同的基元类型,不同的语言会给出不同的结果
您使用的是同一个编译器这一事实并不能保证行为始终有效。即使您总是使用完全相同的编译器版本和相同的构建标志,行为也可能因不同的输入代码而改变
编译器在给定默认值(0)时是一致的
也许吧,但这是你不能依赖的
未定义原语变量的gcc实现是什么
如果不查看源代码并跟踪执行以了解在特定情况下会发生什么(优化标志、编译器版本、输入代码…),很难说
编译器始终保持一致,默认值为0
尝试在周围添加代码,您可能也能看到C的“随机”值
因此,相同的编译器,但对于相同的基元类型,不同的语言会给出不同的结果
您使用的是同一个编译器这一事实并不能保证行为始终有效。即使您总是使用完全相同的编译器版本和相同的构建标志,行为也可能因不同的输入代码而改变
在C++中,具有原始类型(<代码> int <代码> >代码>双<代码> > <代码> char < /代码>,……)未定义如此未定义的行为。< /P>
我想你指的是未初始化的——只是让它们未初始化并不是未定义的行为。事实上,在以后阅读它们之前,当您知道要为它们赋值时,这是很常见的
基元类型没有默认值,因为它们没有构造函数
获取具有静态或线程本地存储持续时间的对象
与C相比,我可以
您已经观察到程序可以具有的许多允许行为中的一个特定行为。C标准规定:
用C语言初始化(重点):
- 如果没有明确初始化具有自动存储持续时间的对象,其值是不确定的
- 如果没有显式初始化具有静态或线程存储持续时间的对象,则: -如果有指针类型,则初始化为空指针 -如果它有算术类型,则初始化为(正或无符号)零 -如果它是一个聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位 -如果它是一个并集,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位
- 如果没有明确初始化具有自动存储持续时间的对象,其值是不确定的
- 如果没有显式初始化具有静态或线程存储持续时间的对象,则: -如果有指针类型,则初始化为空指针 -如果它有算术类型,则初始化为(正或无符号)零 -如果它是一个聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位 -如果它是一个并集,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位
21898, 22075, 22020, 21906, ...
#include <stdio.h>
int main(){
int i;
printf("%i\n",i);
}