微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

解决方法

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

If the object to which the glvalue refers is not an object of type T and is not an object of a type derived from T,or if the object is uninitialized,a program that necessitates this conversion has undefined behavior.

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

原文地址:https://www.jb51.cc/c/111439.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐