猿问

初始化是否需要从lvalue到rvalue的转换?‘int x=x;’UB?

初始化是否需要从lvalue到rvalue的转换?‘int x=x;’UB?

C+标准包含了3.3.2中“令人惊讶的”名称查找的一个半著名的示例“声明点”:

int x = x;

这将初始化x它本身,它(是一个原始类型)是未初始化因此,它有一个不确定的值(假设它是一个自动变量)。

这实际上是没有定义的行为吗?

根据4.1“lvalue-rvalue转换”,对未初始化的值执行lvalue-rvalue转换是未定义的行为。右手x接受这个转变?如果是这样的话,这个例子是否真的有未定义的行为呢?


撒科打诨
浏览 459回答 3
3回答

扬帆大鱼

这不是未定义的行为,只是不知道它的具体值,因为没有初始化。如果变量是全局的,并且是内置类型的,那么编译器将把它初始化为正确的值。如果变量是本地的,所以编译器没有初始化它,所以所有变量都是自己初始化的,那么就不要依赖编译器。
随时随地看视频慕课网APP
我要回答