这可能是一个愚蠢的问题,答案可能只是“因为”,但我很好奇,所以在这里。假设我想将std::vector
的最终元素复制到前面而不考虑其他地方发生的事情。我可以通过一个简单的函数调用
#include <vector>
#include <algorithm>
std::vector<int> v;
.
.
.
std::copy(v.begin() + N, v.end(), v.begin());
我发现令人惊讶的是,如果N == 0
(我认为除非v.empty()
)标准似乎标注了这种未定义的行为。因为即使是std::copy
的天真实现在这种情况下也不会有问题(实际上会产生NOP),为什么标准如此严格?