在初始化期间为其自身分配未初始化的字符串

Assigning an uninitialized string to itself during initialization

本文关键字:初始化 分配 字符串      更新时间:2023-10-16

以下程序真的有效吗C++?

#include <string>   
int main () {
    std::string x = x;
    return 0;
}

它使用 g++ 编译时没有错误或警告,运行时只有 seg 错误。

如果我将x的类型更改为int,它至少会给我一个警告:warning: "x" is used uninitialized in this function [-Wuninitialized]

我本来希望该行无效,因为以前没有声明过x

是的,它的格式正确。变量名称的声明点在声明符std::string x之后,在初始化器= x之前,所以变量的名称可以在它自己的初始化器中使用。

这允许不使用该值的明确定义的初始化,例如:

void * p = &p;

但不幸的是,它也允许在像您这样的示例中使用未初始化的值,具有未定义的行为。

这是未定义的行为。当您使用未初始化的对象初始化一个对象时。