从模板元编程上看,c++的标准库的is_pod在2020已经废弃了,但是这个功能还可以说下。

cpp reference: is_pod

pod

pod是plain old data的缩写,概念上讲,pod是一个类似于struct的东西,就是只有数据,没有花里胡哨的。花里胡哨很难定义,但是写代码的大概知道什么意思,主要就是一个等于号可以正常复制。

c++的数据结构非常复杂,所以pod的定义也要长一点。

c++的pod由两部分组成,标准布局和平凡性。听起来好像都差不多,当然程序取名肯定是有不一样的。

std::is_pod<A> = std::is_standard_layout<A> && std::is_trival<A>

标准布局

有个模板元编程的函数 std::is_standard_layout 可以判断是否标准布局。

标准布局是继承链里只有一个父类有非静态成员变量。就是说可以继承很多类似于namespace的类,但是只能集成一个正常的类。

好处是内存兼容性好,c++的特色,不得不品尝。

trivial

这个词很难翻译,可以叫显然,但是实际含义和显然没啥关系。

含义是类的构造器是默认的,没有被删除。这个有点显然,但是听到显然好像想不到是这么回事。

大概就是能像struct一样初始化。