我想比较 C++ 类/结构对象。在 C 中,大多数时候,通过将各个字段的大小相加(假设编译器不添加填充),可以知道 struct
的确切大小。因此可以在两个对象上使用 memcmp() 函数来非常快速地比较它们。我不确定是否同样适用于 C++。这是因为一个类也有函数定义,也许还有一些其他隐藏的东西(也许是一些 RTTI 信息?甚至是虚函数表?)
一个包含int
和char
成员和一个函数的简单结构的快速程序表明结构的大小是sizeof(int)+sizeof(char )
。
我有一个大型结构类,具有简单的 int、char 等数据类型(但数量很多)。我想不时比较对象。我不能重载 ==
运算符,因为这会使它们逐个字段进行比较。在 C 中,我可以使用 memcmp()
一次性进行比较。对 C++ 有什么建议吗?我可以直接使用memcmp()
吗?我不希望 memcmp() 失败,因为像虚函数指针表这样的其他值是不同的(但所有字段实际上都是相等的)
(我正在使用 g++)
最佳答案
注意许多方面...
- 任何填充中的值都是不确定的,因此不可比较。
- 如果你的机器是小端的,比较整数字段会产生一个答案;如果你的机器是 big-endian,它会产生另一个答案。
- 大多数人认为 -1 小于 0,但
memcmp()
会进行字节无符号比较,因此会将 -1 视为大于 0。 - 任何指针本质上都不能与
memcmp()
进行相关比较。 - 您不能使用
memcmp()
比较float
或double
。
总的来说,您正在寻求一种不明智的优化。
关于c++ - 比较 C 和 C++ 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1020820/