c++ - 比较 C 和 C++ 中的结构

标签 c++ class

我想比较 C++ 类/结构对象。在 C 中,大多数时候,通过将各个字段的大小相加(假设编译器不添加填充),可以知道 struct 的确切大小。因此可以在两个对象上使用 memcmp() 函数来非常快速地比较它们。我不确定是否同样适用于 C++。这是因为一个类也有函数定义,也许还有一些其他隐藏的东西(也许是一些 RTTI 信息?甚至是虚函数表?)

一个包含intchar 成员和一个函数的简单结构的快速程序表明结构的大小是sizeof(int)+sizeof(char )

我有一个大型结构类,具有简单的 int、char 等数据类型(但数量很多)。我想不时比较对象。我不能重载 == 运算符,因为这会使它们逐个字段进行比较。在 C 中,我可以使用 memcmp() 一次性进行比较。对 C++ 有什么建议吗?我可以直接使用memcmp()吗?我不希望 memcmp() 失败,因为像虚函数指针表这样的其他值是不同的(但所有字段实际上都是相等的) (我正在使用 g++)

最佳答案

注意许多方面...

  1. 任何填充中的值都是不确定的,因此不可比较。
  2. 如果你的机器是小端的,比较整数字段会产生一个答案;如果你的机器是 big-endian,它会产生另一个答案。
  3. 大多数人认为 -1 小于 0,但 memcmp() 会进行字节无符号比较,因此会将 -1 视为大于 0。
  4. 任何指针本质上都不能与 memcmp() 进行相关比较。
  5. 您不能使用 memcmp() 比较 floatdouble

总的来说,您正在寻求一种不明智的优化。

关于c++ - 比较 C 和 C++ 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1020820/

相关文章:

Javascript 从私有(private)函数修改公共(public)属性

javascript - Ajax Javascript 类未定义

java - 将一个类实例传递给另一个类

python - scons 自定义决策函数是否需要成为类成员?

c# - Lambda 表达式练习

c++ - 具有依赖关系的静态库

c++ - 从 mex 访问 Matlab 结构

c++ - 如何控制使用 MPC 时清理的输出目录和文件?

c++ - C++ 中策略类的 protected 析构函数

python - 该类的两个不同实例在内存中具有相同的列表地址