我在N3485 25.3.1 [alg.copy]中查看了C++标准,它定义了4种算法:
copy
copy_backward
copy_if
copy_n
在描述中copy
,有这个注释25.3.1 [alg.copy]/3:
要求:结果不应在[first,last]范围内
也就是说,copy
当范围重叠(类似于memcpy
)时,并不总是正常工作.
copy_backward
并且copy_if
有类似的语言禁止重叠范围(分别为25.3.1 [alg.copy]/14和25.3.1 [alg.copy]/8).
但是,没有这样的禁令copy_n
,也没有copy_n_backward
.这是否意味着copy_n
当范围重叠时做正确的事情?
(MSVC++的实现copy_n
似乎委托给了std::memmove
,所以我知道它在MSVC++ 2013上是安全的.但是如果标准暗示的话,我不想依赖它)