gpt4 book ai didi

c++ - 如何选择功能模板特化?

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:13 25 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

template<typename T>
void fun(T t)
{
cout << "match T" << endl;
}

template<>
void fun(int const& t)
{
cout <<"match int const & "<<endl;
}

int main(int argc, char* argv[])
{
const int x =12;
const int& y =x;
fun(x); //why not the second?
fun(y); //why?
fun(4);//why?

return 0;
}

Output:

match T
match T
match T

我们知道在函数模板重载解析后,编译器应该从选定的基函数模板中选择最匹配的特化?规则是什么?

最佳答案

这是两个不同的模板!

你想做的是

template<>
void fun<const int>(const int& t)
{
cout << "match const int & " << endl;
}

注意两件事:

  1. 对于特化函数,指定特化的<>运算符在函数名之后
  2. const typetype const 原则上是两个不同的东西;当 type 是一个指针时(它是一个常量指针还是一个指向常量的指针?),这就变得很棘手了!

此外,正如评论已经指出的那样,没有充分的理由在此处使用模板。一个简单的重载函数就可以了。

关于c++ - 如何选择功能模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27984903/

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