Cppreference 状态,关于std::memcpy()
(强调):
如果对象可能重叠或不是 TriviallyCopyable,则 的行为
memcpy
未指定并且可能未定义。
所以,我总是在使用之前检查以确保对象是可简单复制的memcpy()
,如下所示:
#include <type_traits>
static_assert(std::is_trivially_copyable<T>::value, "Type T must "
"be a trivially-copyable type in order to guarantee that `memcpy()` is safe "
"to use on it.");
memcpy(&outputData, &data, sizeof(data));
std::copy()
但是,似乎没有这个限制:https ://en.cppreference.com/w/cpp/algorithm/copy 。
这种类型必须是可简单复制才能没有未定义行为的限制是否不适用于std::copy()
?
另外,我刚刚在我的“安置新”答案中意识到,这让我想知道这整件事,我只是使用memcpy()
而不是std::memcpy()
,而我不是 using namespace std;
,所以调用了哪个函数?是memcpy()
不同的实现std::memcpy()
吗?