我知道, 功能的模板 使用,以便使的功能便携式,并使他们可以用任何数据类型。

明确的专业化 的模板是完成,如果我们有一个更有效的执行对于一个特定的数据类型。

但随后,而不是的 明确的专业化 我们也可能只是代码 非模板功能 这可能是从 main .这将为我们节省一些时间处理,因为编译器就定位 非模板功能 速度比 明确专门的模板功能 这反过来会是更好的效率。

那么,为什么我们使用 明确的专业化 当我们有备选的只是打电话 非模板功能?

请纠正我,如果我错了!

编辑1: 我告诉我的教授,无论我们何时使功能的模板,并呼从功能 main 编译器的第一个看起来对模板功能并且如果它不能够找到这一点,那么它的搜索功能的模板,从而它反过来又会使一个模板功能,并随后呼吁。

有帮助吗?

解决方案

听起来您将编译时效率与运行时效率混淆。选择哪个函数是在编译时间而不是运行时间进行的,因此该程序对程序的运行时间没有影响。

当您有一种特殊案例中受益于特殊治疗的特殊情况时,使用明确的专业化。有时候,这种适得其反,例如 std::vector<bool>, ,虽然有时非常方便。这意味着该功能的用户不需要意识到有特殊情况。这只是透明的。

其他提示

这将节省我们的一些处理时间,因为编译器将比明确专业的模板功能更快地定位全局功能,这反过来又将其效率更好。

为什么编译器会比功能模板专业化更快地找到非安装功能?您是否对编译器性能进行了基准测试以验证此声明?如果您使用名为的函数 f, ,编译器始终必须编译一组候选功能并执行过载分辨率,以确定要使用的正确函数。

在运行时(哪个确实重要的是,对吗?

那么,当我们可以选择仅调用全局功能的选择时,为什么要使用明确的专业化?

在一般情况下,对于功能模板,您不使用明确的专业化,因为它通常令人困惑且困难。 ISO C ++标准具有诗意的警告,在专门化功能模板时要非常谨慎。您可以阅读Herb Sutter的 “为什么不专门化功能模板?” 为了很好地解释这些问题,以及为什么不想专业化功能模板。

原因的均匀性。人使用API仅仅是电话的方法与特定的参数,有的得到通用功能的一些得到明确的专门职能的客户需要既不知道也不关心他们使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top