小编O.T*_*nta的帖子

C++ 类型与非类型模板推导问题

我有一个关于当有两个匹配时 C++ 模板推导的问题:一个是类型匹配,另一个是非类型匹配。在以下情况下:

// First
template<int>
void g(int a)
{
...
}

// Second
template<class A>
void g(A a)
{
...
}

int a = 1;
g(a);
Run Code Online (Sandbox Code Playgroud)

第二个模板受到青睐,而如果非类型化模板参数被赋予默认值:

// First
template<int m = 1>
void g(int a)
{
...
}

// Second
template<class A>
void g(A a)
{
...
}

int a = 1;
g(a);
Run Code Online (Sandbox Code Playgroud)

第一个模板受到青睐。为什么??这里有哪些规则在起作用?谢谢。

c++ templates template-argument-deduction

5
推荐指数
1
解决办法
62
查看次数