我想比较C++类/结构对象.在C中,大多数时候,人们struct通过将各个字段的大小相加来知道确切的大小(假设编译器不添加填充).因此可以在两个对象上使用memcmp()函数来非常快速地比较它们.我不确定C++是否适用.这是因为一个类也有函数定义,也许还有一些其他隐藏的东西(也许是一些RTTI信息?虚拟函数表甚至?)
用含有简单结构的快速程序int和char部件以及功能显示,该结构的大小为sizeof(int)+sizeof(char).
我有一个大的struct类,包含简单的int,char等数据类型(但是有很多).我想不时地比较对象.我不能重载==运算符,因为它会使它们按字段比较每个字段.在C中,我可以一次性比较使用memcmp().有关C++的任何建议吗?我可以memcmp()直接使用吗?我不希望memcmp()失败因为虚拟函数指针表之类的其他值不同(但所有字段实际上都相等)(我正在使用g ++)
Jon*_*ler 10
警惕很多......
memcmp()会进行逐字节无符号比较,因此将-1视为大于0.memcmp().float或double使用memcmp().总的来说,您正在寻求一种非合理的优化.
可以采用sizeof()结构或类.
编辑: 因为我提供了上面的答案,你已经改变了你的问题"如何手动确定C++结构和类的大小?" 关于比较两个类的更一般的一个.
简短的回答是,您确实想要使==运算符超载.相信每次按字段比较每个字段的信念是不正确的; 您可能会重载operator ==以使用您喜欢的任何算法,包括a memcmp.
memcmp()从第一个字段偏移到最后一个的内存应该可以正常工作.甲memcmp()如果是在类类型A的比较另一个类B,其从A继承,对类的整个覆盖区可能会失败作为V表指针可以是不同的.