最近学习《STL源码剖析》,实际看了stl头文件stl_construct.h,文件中看到有如下代码:
template<typename _ForwardIterator>
inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last)
{
typedef typename iterator_traits<_ForwardIterator>::value_type _Value_type;
std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::__destroy(__first, __last);
}
其中__has_trivial_destructor()这个函数找了好久也没在头文件中找到,后来才发现这个东西是编译器内置的,用来检测类型是否拥有用户自定义的析构函数,如果有用户自定义的析构函数的话返回0,具体内容可以写个测试程序用来测试,这里不再赘述。
由此可以联想到,也许stl代码中多数以__前缀,但是却找不到具体定义的函数,可能是编译器内置的。