自动判断用户定义函数是否等同于隐式函数
Automatically determine if user-defined function is equivalent to the implicit one
有时,用户使用与隐式定义版本相同的功能实现函数。例如,复制构造函数只调用其所有成员的复制构造函数。
struct A
{
int B;
A(const A& a) : B(a.B) { }
}
这是不可取的,因为它会导致额外的维护,例如,如果类成员被重命名/重新排序等,并且会降低可读性。此外,添加这些函数还意味着,像std::is_trivially_copy_constructable
这样的函数声明类型不能被简单地复制构造(但实际上,它实际上可以)。
我有一个代码库,这似乎是一个常见的现象,我想纠正,通过删除这些实现。然而,我对删除看似与隐式实现相同的功能感到不安,以防它实际上可能并不等同。是否有一种方法来确定一个函数是否等于它的隐式版本?(使用任何工具集/语言变体/等等都是可以接受的)
我的建议是不要试图通过编程来确定这些函数是否与默认实现相同,因为差异实际上可能是一个错误(它们应该具有正常的默认行为)。
相反,我建议编写一组单元测试,负责测试各种函数的预期行为,然后确保它们传递默认实现。然后,您不仅有一个用于将来增强的测试框架,还可以确信函数已经按照您的要求完成了。相关文章:
- 函数是否可以访问传递给main()的参数
- 根据某个函数是否存在启用模板
- 无论如何,我可以确定构造函数是否存在吗?
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 由并发无序映射查找线程调用的函数是否安全?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 从其存储的回调中删除 std::函数是否安全
- 析构函数是否会自动调用 delete[] C++?
- 构造函数是否有一种现代C++方法来了解其'container'类?
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 移动构造函数是否C++过时?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 此函数是否会在C++中创建内存泄漏?
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 如何检测构造函数是否与抛出的析构函数无关