特殊成员函数是“如果使用它们,编译器将自动生成但未由程序员明确声明的函数”。
http://en.wikipedia.org/wiki/Special_member_functions
详细信息在C ++ 11标准的第12节中:
默认构造函数(12.1),复制构造函数和复制赋值运算符(12.8),移动构造函数和移动赋值运算符(12.8)以及析构函数(12.4)是特殊成员函数。 [注意:当程序没有明确声明它们时,实现将隐式声明某些类类型的这些成员函数。如果它们使用得很多,那么实现将隐式定义它们(3.2)。见12.1,12.4和12.8。 - 结束记录]
哪些已知方法可以在编译时识别所有生成的特殊成员函数?
我首选的编译器是gcc和clang。
答案 0 :(得分:1)
在c ++ 11中,标题<type_traits>
定义了一组以下函数:
is_constructible
is_default_contructible
is_copy_contructible
is_move_contructible
is_assignable
is_copy_assignable
is_move_assignable
is_destructible
您可以使用它们在编译时测试隐式生成的方法是否存在, 例如:
std::is_constructible<ClassName>::value