C++ std::littlely_copyable_v和std::is_pod_v(std::is_standard_layout&;std::is_little_v)之间有什么区别

C++ std::littlely_copyable_v和std::is_pod_v(std::is_standard_layout&;std::is_little_v)之间有什么区别,c++,c++17,typetraits,C++,C++17,Typetraits,我在看这两种类型特征的文档,我不确定它们的区别是什么。我不是语言律师,但据我所知,它们都适用于“memcpy-able”类型 它们可以互换使用吗?否这些术语不能互换使用。这两个术语都表示可以与memcpy一起使用的类型,任何POD都是可复制的,但可复制的不一定是POD 在这个简单的示例中,您可以看到foo是POD(随后可以简单地复制),而bar不是POD,但可以简单地复制: #include <iostream> struct foo { int n; }; struct

我在看这两种类型特征的文档,我不确定它们的区别是什么。我不是语言律师,但据我所知,它们都适用于“memcpy-able”类型


它们可以互换使用吗?

否这些术语不能互换使用。这两个术语都表示可以与
memcpy
一起使用的类型,任何POD都是可复制的,但可复制的不一定是POD

在这个简单的示例中,您可以看到
foo
是POD(随后可以简单地复制),而
bar
不是POD,但可以简单地复制:

#include <iostream>

struct foo
{
    int n;
};

struct bar
{
    int n = 4;
};

int main()
{
    std::cout << std::boolalpha << std::is_pod<foo>() << "\n";
    std::cout << std::boolalpha << std::is_trivially_copyable<foo>() << "\n";
    std::cout << std::boolalpha << std::is_pod<bar>() << "\n";
    std::cout << std::boolalpha << std::is_trivially_copyable<bar>() << "\n";
}
#包括
结构foo
{
int n;
};
结构条
{
int n=4;
};
int main()
{

std::cout还有助于注意,
std::is_pod
用于,它需要一个,而这反过来又需要一个类型。