我正在查看这两种类型特征的文档,但不确定有什么区别。我不是语言律师,但据我所知,它们都适用于“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";
}
上面的输出是:
true
true
false
true
foo
和bar
都可以安全地与memcpy
, whose documentation states 一起使用:
If the objects are [...] not TriviallyCopyable, the behavior of memcpy is not specified and may be undefined.
关于c++ - std::trivially_copyable_v 和 std::is_pod_v 之间有什么区别(std::is_standard_layout && std::is_trivial_v),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67798506/