自动判断用户定义函数是否等同于隐式函数

Automatically determine if user-defined function is equivalent to the implicit one

本文关键字:函数 是否 等同于 定义 判断 用户      更新时间:2023-10-16

有时,用户使用与隐式定义版本相同的功能实现函数。例如,复制构造函数只调用其所有成员的复制构造函数。

struct A
{
    int B;
    A(const A& a) : B(a.B) { }
}

这是不可取的,因为它会导致额外的维护,例如,如果类成员被重命名/重新排序等,并且会降低可读性。此外,添加这些函数还意味着,像std::is_trivially_copy_constructable这样的函数声明类型不能被简单地复制构造(但实际上,它实际上可以)。

我有一个代码库,这似乎是一个常见的现象,我想纠正,通过删除这些实现。然而,我对删除看似与隐式实现相同的功能感到不安,以防它实际上可能并不等同。是否有一种方法来确定一个函数是否等于它的隐式版本?(使用任何工具集/语言变体/等等都是可以接受的)

我的建议是不要试图通过编程来确定这些函数是否与默认实现相同,因为差异实际上可能是一个错误(它们应该具有正常的默认行为)。

相反,我建议编写一组单元测试,负责测试各种函数的预期行为,然后确保它们传递默认实现。然后,您不仅有一个用于将来增强的测试框架,还可以确信函数已经按照您的要求完成了。