gpt4 book ai didi

c++ - 如果以后未使用/设置未初始化的数据,是否可以复制它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:54 26 4
gpt4 key购买 nike

下面的代码是否安全,只要我不先读取结构数组的任何元素而不先将其设置为实际值?谢谢。

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) . *(first + n) 给出的值是左值表达式(§5.3.1/1),在您的情况下指的是未初始化的值。由于赋值运算符需要一个纯右值作为它的右操作数(这是 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++ - 如果以后未使用/设置未初始化的数据,是否可以复制它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com