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

时间:2014-11-24 14:47:15

标签: c++ initialization

以下程序是否真的对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

2 个答案:

答案 0 :(得分:2)

是的,形式良好。变量名称的声明点在声明者std::string x之后,在初始化= x之前,因此变量的名称可以在其自己的初始化程序中使用。

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

void * p = &p;

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

答案 1 :(得分:1)

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