以下的区别?哪一个有未定义的行为?都?
std::copy_n(asdf.begin(), asdf.size(), asdf.begin());
std::copy(asdf.begin(), asdf.end(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)
假设a std::vector<int>给出了函数.有些人说的话,这两个功能并不相同.
这是标准中的缺陷吗?
std::copy_n(asdf.begin(), asdf.size(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)
这不是未定义的行为.copy_n只需要[first, first + n)和[result, result + n)有效范围.通过你已经通过的论据,你已经保证了它们.(我假设asdf是一个标准容器,或具有类似行为的容器.我还假设包含的类型具有良好的赋值运算符)
std::copy(asdf.begin(), asdf.end(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)
这有未定义的行为.因为std::copy,result不得在范围内[first, last)