首页 > 解决方案 > 琐碎对象和非琐碎对象有什么区别

问题描述

我实际上不确定了解琐碎对象和非琐碎对象之间的区别。例如,这里说一个微不足道的对象:

但是对象会自动对齐内存中的数据吗?如果它满足这两点但有方法怎么办?有什么与POD有关的吗?

“琐碎”对我来说听起来像是可以像简单类型一样使用的东西。但我想它比这更复杂。

标签: c++c++11

解决方案


可以在此处找到平凡类型的官方定义。

简单来说,平凡类型要么是基本类型(intfloat等),要么是仅由其他平凡类型组成的类型,并且没有此处列出的任何特殊成员函数。其他成员函数不起作用。

琐碎的一点是该类型可以完全像基本类型一样对待,因为该类型的对象可以被复制和移动,memcpy并且可以在不做任何事情的情况下构造破坏。因此,琐碎性要求类型本质上仅由基本类型组成。这就是使复制、移动、构造和销毁操作与普通类型的定义相关的原因。其他成员函数不会发挥作用,就像您可以编写void fn( int*, OtherArgs... )而不影响 anint是否平凡一样,因为您可以将成员函数T视为本质上是自由函数,具有ReturnType member_function( T*, OtherArgs... )编译器让您使用语法调用的签名a.member_function( other_args... ).

至于对齐,它根本就不是那么相关,因为它已经为您处理好了。由于强大的静态类型系统,编译器知道它正在使用的类型的对齐方式。

正如您在此处看到的,所有 POD 类型都是微不足道的。


推荐阅读