c – 如果未初始化的数据未被使用/稍后设置,是否可以复制?
发布时间:2020-12-16 03:25:19 所属栏目:百科 来源:网络整理
导读:下面的代码是安全的,只要我没有读取结构数组的任何元素而不先设置实数值吗?谢谢. 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 d
下面的代码是安全的,只要我没有读取结构数组的任何元素而不先设置实数值吗?谢谢.
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节):
所以你的代码有不确定的行为.解决方案当然是初始化数组的元素(可能使用int data [data_size] = {};). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |