The 维基百科文章 http://en.wikipedia.org/wiki/Template_metaprogramming说:
实例化类模板不会导致其成员定义被实例化。
我无法想象 C++ 中的任何类被实例化,无论是否从模板中,类成员也没有被实例化?
许多早期的 C++ 编译器都会实例化所有成员函数,无论您是否调用过它们。
例如,考虑一下,std::list
,其中有一个sort
成员函数。使用当前运行正常的编译器,您可以实例化list
超过不支持比较的类型。如果您尝试使用list::sort
,它会失败,因为你不支持比较。只要你不打电话sort
对于该列表,一切都很好,因为list<T>::sort
除非你调用它,否则不会被实例化。
然而,对于那些旧的、功能不佳的编译器,试图创建list<T>
这意味着list<T>::sort
即使您从未使用过它,也会被实例化。的存在list::sort
意味着你需要实施<
for T
,只是为了创建一个list<T>
,即使你从未真正使用过sort
根本就在那种类型的名单上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)