【问题标题】:Is initializing a variable with an uninitialized variable legal?用未初始化的变量初始化变量是否合法?
【发布时间】:2013-06-13 11:02:38
【问题描述】:

以下 C++ 代码是合法的:

char* ptr;

而以下不是(使用未初始化的变量是UB):

ptr++;

请问以下代码:

char* ptr2 = ptr;

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

【问题讨论】:

  • 我会说不,除了写入一个未初始化的变量(初始化它)之外的任何事情通常都是未定义的行为。当然,标准的措辞可能有点迟钝。
  • 使用未初始化的指针可能会导致不可预测的和潜在的灾难性结果。因此,出于同样的原因,char* ptr2 = ptr; 将是非法的,导致未定义的行为。 (not posting answer because I have no reference)

标签: c++ initialization language-lawyer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    声明声明:

    char* ptr2 = ptr;
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 2021-06-21
        • 2017-02-23
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        相关资源
        最近更新 更多