[英]C++: POD and POD-wrapping objects
我经常声明类来包装单个普通旧数据值; 没有虚函数的简单类,例如:
class Velocity {
int vel;
public:
// functions to work with velocity ...
}
使用此类对象与使用 POD 值相同吗? -- 如果在我的代码中我使用的是int
而不是Velocity
,空间或时间的使用有什么不同吗? 标准对此有任何说明吗?
我可以将指针或此类对象的数组转换为 POD 值的指针/数组,反之亦然吗? -- 我做Velocity *v = reinterpret_cast< Velocity* >( int_pointer )
是否完全安全?
使用此类对象与使用 POD 值相同吗?
不。在上面使用memcpy
和朋友并不完全安全(仅允许在 POD 上使用!)。
我可以将指针或此类对象的数组转换为 POD 值的指针/数组,反之亦然吗?
如果它是一个 POD,你是完全安全的。 但这不是 POD,因为它有一个私有数据成员。
双方的这一说,在实践中它会正常工作对于类(C ++ 0x中,你被允许使用这样的类与私有成员memcpy
,因为它允许它为所有平凡的可复制的类型,其中包括您的类型和许多其他非 POD)。
Re“与 POD 相同”,并不完全在 C++98 中。 C++98 不允许 POD 拥有私有成员。 C++0x 解除了这个限制(以及其他一些限制)。
再效率,或缺乏效率,这是一个实施质量问题。
要求您的编译器进行优化,然后进行测量(如果重要)。
重新铸造:不,具有实现定义的效果。 不要这样做。
干杯 & hth.,
1)您的示例不是POD,因为该类具有私有字段
2)标准没有定义使用 reinterpret_cast 时会发生什么。 发生的任何事情都是实现定义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.