正在初始化一个未初始化变量的变量是否合法?
问题描述:
以下C++代码是合法的:正在初始化一个未初始化变量的变量是否合法?
char* ptr;
虽然以下没有(使用一个未初始化的变量UB):
ptr++;
将以下代码:
char* ptr2 = ptr;
是合法还是会是未定义的行为?
答
声明语句:
char* ptr2 = ptr;
将读取的ptr
的(未初始化)值。这是UB,因为没有定义ptr
的值。
答
由于与增量增量相同的原因,这是未定义的 - 您没有定义的基础开始。
答
这是合法的,但由于您不知道ptr
的内容(大多数编译器会给您一个警告),因此行为未定义。
我会说不,除了*写入一个未初始化的变量(初始化它)通常是未定义的行为。当然,标准的措词可能会更加隐晦。 –
使用未初始化的指针可能会导致不可预知的和潜在的灾难性后果。因此,出于同样的原因'char * ptr2 = ptr;'将是非法的,导致未定义的行为。 (*'没有发布答案,因为我没有参考文献*) –