下面的程序真的是有效的 C++ 吗?
#include <string>
int main () {
std::string x = x;
return 0;
}
使用 g++ 进行编译时不会出现错误或警告,并且在运行时只会出现段错误。
如果我将 x 的类型更改为 int
,它至少会给我一个警告:警告:“x”在此函数中未初始化使用 [-Wuninitialized]
.
我本以为该行无效,因为 x
之前尚未声明。
最佳答案
是的,它的格式良好。变量名称的声明点位于声明符 std::string x
之后,初始化程序 = x
之前,因此变量名称可以在其自己的初始化程序中使用.
这允许不使用该值的明确定义的初始化,例如:
void * p = &p;
但不幸的是,也允许在像您这样的示例中使用未初始化的值,并具有未定义的行为。
关于c++ - 在初始化期间将未初始化的字符串分配给自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107497/