gpt4 book ai didi

C++ - 函数模板特化的目的是什么?什么时候使用它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:47 25 4
gpt4 key购买 nike

学习C++,接触到函数模板。本章提到了模板特化。

  1. template <> void foo<int>(int);

  2. void foo( int );

当你可以使用第二个时,为什么要专门化?我认为模板应该可以概括。当您只能使用常规函数时,为特定数据类型专门化函数有什么意义?

显然,模板特化的存在是有原因的。应该什么时候使用?我读了 Sutter 的 "Why not Specialize..."文章,但我需要更多的外行版本,因为我只是在学习这些东西。

最佳答案

主要区别在于,在第一种情况下,您为编译器提供了特定类型的实现,而在第二种情况下,您提供了一个不相关的非模板函数。

如果你总是让编译器推断类型,编译器将优先选择非模板函数而不是模板,并且编译器将调用自由函数而不是模板,因此提供与在大多数情况下,参数将具有与特化相同的效果。

另一方面,如果您在任何地方提供模板参数(而不是让编译器推断),那么它只会调用通用模板并可能产生意想不到的结果:

template <typename T> void f(T) { 
std::cout << "generic" << std::endl;
}
void f(int) {
std::cout << "f(int)" << std::endl;
}
int main() {
int x = 0;
double d = 0.0;
f(d); // generic
f(x); // f(int)
f<int>(x); // generic !! maybe not what you want
f<int>(d); // generic (same as above)
}

如果您为模板的 int 提供了专门化,最后两个调用将调用该专门化而不是通用模板。

关于C++ - 函数模板特化的目的是什么?什么时候使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com