c++ - 在初始化期间将未初始化的字符串分配给自身

标签 c++ initialization

下面的程序真的是有效的 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/

相关文章:

c++ - 构造函数中的引用初始化问题

c++ - Qt5 是否有类似于 StringBuilder 或 StringBuffer 的类?

c++ - 如何从缓冲区及其大小填充std::vector?

java - 如果在主方法中声明并在循环内进行初始化,那么从 For 循环外部访问变量是否不可能在 Java 中?

java - 静态初始化 block 的替代方案是什么?

java - 使用 @BeforeClass 初始化 vs java 中的急切初始化

c++ - 在构造函数的初始化列表中将 c-style-string 转换为 std::string

c++ - 计算对象数组的元素(大小)

c++ - 使用带有自定义图形的 r_c_shortest 路径( boost )

c++ - memset() 中将 int 值转换为 unsigned char 是如何工作的?