有时,用户使用与隐式定义的版本相同的功能来实现函数。例如,一个复制构造函数,它只调用其所有成员的复制构造函数。
struct A
{
int B;
A(const A& a) : B(a.B) { }
}
这是不可取的,因为它会导致额外的维护,例如,如果重命名/重新排序类成员等,并降低了可读性。此外,添加这些函数还意味着std::is_trivially_copy_constructable
等函数声称类型不能轻易地复制构造(但实际上,它实际上可能是)。
我有一个代码库,这似乎是常见的事情,我想通过删除这些实现来纠正。但是,我对删除似乎与隐式实现相同的功能感到不安,以防它实际上可能不等效。有没有一种方法可以确定函数是否等效于其隐式版本? (可以使用任何工具集/语言变体/等)。
答案 0 :(得分:2)
我的建议是不要尝试以编程方式确定这些函数是否与默认实现相同,因为差异可能实际上是一个错误(并且它们应该具有正常的默认行为)
相反,我建议编写一组单元测试,负责测试各种函数的预期行为,然后确保它们传递默认实现。那么,您不仅拥有未来增强功能的测试框架,而且您可以确信功能可以满足您的需求。