Vector, assign() function Undefined Behavior

Vector, assign() function Undefined Behavior

本文关键字:function Undefined Behavior assign Vector      更新时间:2023-10-16

我很好奇; 如果我们像下面这样使用,矢量中的 assign(( 函数会导致未定义的行为;

std::vector<unsigned char> vec{0xAB,0xBC,0xCD};
std::vector<unsigned char> vec2{0xAA,0xBB,0xCC};
vec.assign(vec2.begin(),vec2.begin()+ vec.size());

vec.size()返回vec的大小,因为它恰好与vec2具有相同的大小,因此您的代码没有问题(当然除了一些混淆(。大小从何而来并不重要。如果vec.size() == vec2.size() == 3以下所有操作都将执行相同的操作:

vec.assign(vec2.begin(),vec2.begin()+ vec.size());
vec.assign(vec2.begin(),vec2.begin()+ vec2.size());
vec.assign(vec2.begin(),vec2.begin()+ 3);
auto x = vec2.size();
vec.assign(vec2.begin(),vec2.begin()+ x);
auto y = x + 42;
vec.assign(vec2.begin(),vec2.begin()+ y-42);

当然,当你的意思是vec2.size()是"错误的"时,使用vec.size(),因为一旦向量具有不同的大小,你就会有未定义的行为来越界访问两个向量中的任何一个。