繁体   English   中英

C++:POD 和 POD 包装对象

[英]C++: POD and POD-wrapping objects

我经常声明类来包装单个普通旧数据值; 没有虚函数的简单类,例如:

class Velocity {
    int vel;
public:
    // functions to work with velocity ...
}
  1. 使用此类对象与使用 POD 值相同吗? -- 如果在我的代码中我使用的是int而不是Velocity ,空间或时间的使用有什么不同吗? 标准对此有任何说明吗?

  2. 我可以将指针或此类对象的数组转换为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM