以下程序是否真的对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
。
答案 0 :(得分:2)
是的,形式良好。变量名称的声明点在声明者std::string x
之后,在初始化= x
之前,因此变量的名称可以在其自己的初始化程序中使用。
这允许明确定义的初始化不使用该值,例如:
void * p = &p;
但遗憾的是,还允许未初始化的值在像您这样的示例中使用,具有未定义的行为。
答案 1 :(得分:1)
这是未定义的行为。当您使用未初始化的对象初始化一个对象时。