我正试着把头绕过来
std::is_trivially_copy_assignable<T>
和
std::is_trivially_copyable<T>
.
据我所知,
std::is_trivily_copy_assignable<T>
检查一个简单的(非用户定义的,默认的)复制运算符,而
std::is_trivily_copyable<T>
检查使用是否安全
memcpy
关于类型
T
根据定义,每个
is_trivially_copyable
必须是
is_trivially_copy_assignable
但并非相反。我希望我的定义是正确的。
现在我有以下POD类型的类:
struct Test {
char data[32];
int term;
int dummy[3];
};
当我检查以下内容时:
auto isCopyAssignTrivial = std::is_trivially_copy_assignable<Test>::value; //true
auto isCopyTrivial = std::is_trivially_copyable<Test>::value; //true
auto isArrayCopyAssignTrivial = std::is_trivially_copy_assignable<int[2]>::value; //false
auto isArrayCopyTrivial = std::is_trivially_copyable<int[2]>::value; //true
我得到了上述结果。
此外,当我做以下事情时,我看到
anotherTestPod
它的元素设置正确,工作没有任何问题。
Test testPod{};
for(auto &d :testPod.data) {
d = rand() %100;
}
auto anotherTestPod = testPod;
即使数组本身不是可复制分配的,在is_trivily_copy_assignable的情况下,简单的复制分配是如何工作的?