用未初始化的变量初始化变量是否合法
Is initializing a variable with an uninitialized variable legal?
以下c++代码是合法的:
char* ptr;
,而以下不是(使用未初始化的变量是UB):
ptr++;
下面的代码:
char* ptr2 = ptr;
是合法的还是未定义的行为?
这是未定义的,原因与后增量相同——您没有一个定义的基础作为开始。
声明语句:
char* ptr2 = ptr;
将读取(未初始化的)ptr
的值。它是UB,因为ptr
的值没有定义。
这是合法的,但行为是未定义的,因为你不知道ptr
的内容(大多数编译器会给你一个警告)
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持