在初始化期间为其自身分配未初始化的字符串
Assigning an uninitialized string to itself during 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
。
是的,它的格式正确。变量名称的声明点在声明符std::string x
之后,在初始化器= x
之前,所以变量的名称可以在它自己的初始化器中使用。
这允许不使用该值的明确定义的初始化,例如:
void * p = &p;
但不幸的是,它也允许在像您这样的示例中使用未初始化的值,具有未定义的行为。
这是未定义的行为。当您使用未初始化的对象初始化一个对象时。
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 为什么通过指针编译时不能分配 const 初始化
- C++ 手动分配和初始化对象
- 静态分配对象的值初始化
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 分配给已删除/未初始化的对象
- C++初始化列表与分配值
- 动态分配的对象未初始化
- 可视化C++将分配移动到未初始化的对象?
- 如何修复初始化后'stack around variable was corrupted.'变量未更改为分配的值
- 在不放置新运算符的情况下,在预分配的内存上使用虚函数初始化对象 - 这可能吗?如果没有,为什么
- 在 C++ 中初始化后的数组分配
- 将已初始化的基类分配给派生类
- 初始化原子指针是原子的吗?如果初始化或内存分配引发,会发生什么情况?
- 当您通过分配初始化C 对象时会发生什么
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 将空初始化器列表分配给现有向量或地图的效果
- 为什么支撑初始化分配分配填充垃圾变量
- 课堂初始化(分配样式)与构造函数性能
- 如何在构造函数中初始化分配的堆可变量