提问人:O.T.Vinta 提问时间:8/9/2023 更新时间:8/9/2023 访问量:62
C++ 类型与非类型模板演绎问题
C++ Type vs. Non-Type Template Deduction Question
问:
当有两个匹配项时,我有一个关于 C++ 模板推导的问题:一个是类型化的,另一个是非类型的。在以下情况下:
// First
template<int>
void g(int a)
{
...
}
// Second
template<class A>
void g(A a)
{
...
}
int a = 1;
g(a);
第二个模板是首选,而如果非类型化模板参数被赋予默认值:
// First
template<int m = 1>
void g(int a)
{
...
}
// Second
template<class A>
void g(A a)
{
...
}
int a = 1;
g(a);
第一个模板受到青睐。为什么??这里有哪些规则在起作用?谢谢。
答:
8赞
Erik Man
8/9/2023
#1
在第一种情况下:
// First
template<int>
void g(int a)
{
...
}
只能使用指定的模板参数调用,例如像这样的 .编译器无法推断出要用于 的值,因此第一个函数不参与重载解析。g<1>(42);
int
在第二种情况下,有一个默认值,所以现在这两个函数都是重载解决的一部分,然后版本比推断更接近。int
A = int
评论
a