繁体   English   中英

带有 getter/setter 的 memset 和 struct

[英]memset and struct with getters/setters

我有一个简单的 pod 结构,例如:

struct T
{
    int x;
    float z;
}

我想将数据设为私有并添加 getter/setter。 我可以在那个结构上使用 memset 吗?

memset(obj, 0, sizeof(T)); 

我想将数据设为私有并添加 getter/setter。 我可以在那个结构上使用 memset 吗?

是的,只要 class 可以轻松复制,并且 object 不是潜在重叠的子对象,您就可以使用 memset。

零字节的 PS Memsetting 浮点数在 C++ 技术上不保证将其设置为零,尽管它可能在大多数系统上都这样做。 字节的任何其他值将更没有意义。

PPS 指针也有同样的问题:Null 不保证所有位为零。

PPPS 如果您打算将值设置为零,我想不出使用 memset 0 而不是使用值初始化和赋值的充分理由。

可以用 0 填充你的结构,但结果可能不是你所期望的!

  • C++ 标准不保证在 memory 中所有位为零的浮点数是 0.0f 的表示,它可以是任何东西,具体取决于实现。 如果你使用它,你的代码是不可移植的,并且行为可能会随着下一个编译器版本而改变。 好的,通常它是 0.0f,但是使用“未定义的初始化”是非常糟糕的风格!

  • 编译器通常无法优化原始 memset 编写 memory 的代码。 如果你使用带常量的值初始化,编译器可以优化下面的代码,因为它知道数据的值。 但是对于 memset,情况可能并非如此。

  • 您还填补了数据之间的空白,可能也不是您需要或期望的。

  • 一般来说,OOP 中的 memset 是神秘的,并且通常不会比默认构造更快。

我的建议:如果您的数据类型没有c++ 标准给出的明确定义的表示,则不应在它们上使用memset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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