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

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

概述下面的代码是安全的,只要我没有读取结构数组的任何元素而不先设置实数值吗?谢谢. const int data_size = 5;struct Testing{ int data[data_size]; Testing(const int data[data_size]) { std::copy(data, data + data_size, this 下面的代码是安全的,只要我没有读取结构数组的任何元素而不先设置实数值吗?谢谢.
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] = {};).

总结

以上是内存溢出为你收集整理的c – 如果未初始化的数据未被使用/稍后设置,是否可以复制?全部内容,希望文章能够帮你解决c – 如果未初始化的数据未被使用/稍后设置,是否可以复制?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1255609.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存