如果未初始化的数据未被使用/稍后设置,是否可以复制?

Nei*_*irk 6 c++

下面的代码是安全的,只要我没有读取结构数组的任何元素而不先设置实数值吗?谢谢.

const int data_size = 5;

struct Testing
{
    int data[data_size];

    Testing(const int data[data_size])
    {
        std::copy(data, data + data_size, this->data);
    }
};

int main()
{
    int data[data_size];
    data[2] = 57;

    Testing t(data);

    t.data[1] = 93;
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 9

std::copy定义为*(result + n) = *(first + n)序列中的每个元素(第25.3.1节).给定的值*(first + n)是左值表达式(§5.3.1/ 1),在您的情况下引用未初始化的值.由于赋值运算符需要prvalue作为右操作数(这是错误指定的),这将导致左值到右值的转换.在引用未初始化值的表达式上的左值到右值转换是未定义的行为(第4.1节):

如果以该glvalue是指该对象不是类型T的对象,而不是源自T的类型的对象,如果该对象是未初始化,即必要这种转换的程序有未定义的行为.

所以你的代码有不确定的行为.解决方案当然是初始化数组的元素(也许是int data[data_size] = {};).

  • @Slava:或者只是正确地初始化它.`int data [data_size] = {};` (3认同)