2013-06-13 251 views
1

以下C++代码是合法的:正在初始化一个未初始化变量的变量是否合法?

char* ptr; 

虽然以下没有(使用一个未初始化的变量UB):

ptr++; 

将以下代码:

char* ptr2 = ptr; 

是合法还是会是未定义的行为?

+0

我会说不,除了*写入一个未初始化的变量(初始化它)通常是未定义的行为。当然,标准的措词可能会更加隐晦。 –

+0

使用未初始化的指针可能会导致不可预知的和潜在的灾难性后果。因此,出于同样的原因'char * ptr2 = ptr;'将是非法的,导致未定义的行为。 (*'没有发布答案,因为我没有参考文献*) –

回答

5

声明语句:

char* ptr2 = ptr; 

将读取的ptr的(未初始化)值。这是UB,因为没有定义ptr的值。

6

由于与增量增量相同的原因,这是未定义的 - 您没有定义的基础开始。

3

这是合法的,但由于您不知道ptr的内容(大多数编译器会给您一个警告),因此行为未定义。