我想比较一下C++类/结构对象。在C语言中,大多数情况下,人们通过将各个字段的大小相加来知道struct的确切大小(假设编译器不添加填充)。因此,可以在两个对象上使用memcmp()函数来非常快速地比较它们。我不确定这是否同样适用于C++。这是因为一个类也有函数定义,也许还有其他一些隐藏的东西(也许是一些RTTI信息?虚拟函数表?)
一个包含int和char成员的简单结构和一个函数的快速程序显示该结构的大小为sizeof(int)+sizeof(char)。
我有一个很大的struct类,包含简单的int、char等数据类型(但数量很大)。我想时不时地比较一下对象。我不能重载==操作符,因为这将使它们逐个比较每个字段。在C语言中,我可以使用memcmp()一次性进行比较。对C++有什么建议吗?我可以直接使用memcmp()吗?我不希望memcmp()失败,因为像虚函数指针表这样的其他值是不同的(但所有字段实际上是相等的)(我使用g++)
发布于 2009-06-20 03:39:50
在许多方面保持警惕……
memcmp()会进行逐字节无符号比较,因此会将-1视为大于0。memcmp().比较D12或D13
总体而言,您正在寻求一种不合理的优化。
发布于 2009-06-20 03:03:03
可以将sizeof()作为结构或类。
编辑:自从我提供了上面的答案后,您的问题已经从“如何手动确定C++结构和类的大小?”到更一般的关于比较两个类的问题。
简而言之,您确实希望重载==操作符。认为它会一次一个字段地比较每个字段的想法是不正确的;您可以重载operator ==以使用您喜欢的任何算法,包括memcmp。
内存中从第一个字段偏移量到最后一个字段的memcmp()应该可以正常工作。如果您将类型A的类与从A继承的另一个类B进行比较,则在类的整个占用空间上的memcmp()可能会失败,因为vtable指针可能不同。
发布于 2009-06-20 02:58:04
如果您的class或struct没有任何虚值,那么在C++中“将单个字段的大小相加(并假设编译器不添加填充)”与在C中一样正确(即不完全正确,因为通常会添加填充;-)。
https://stackoverflow.com/questions/1020820
复制相似问题