C++ C++;:在模板函数中将模板参数用作默认参数

C++ C++;:在模板函数中将模板参数用作默认参数,c++,function-templates,C++,Function Templates,给出下面的代码片段: template<int n, double m> void function(int x=n){ double y=m; int array[n]; …. } void main () { function<1+2,2>(8); } 模板 无效函数(int x=n){ 双y=m; 整数数组[n]; …. } 空干管(){ 功能(8); } 编译函数时,x是3还是8(因为n只是默认参数)?在您的示例中,n是3,x是8。实际参数值优先于默

给出下面的代码片段:

template<int n, double m>
void function(int x=n){
 double y=m;
 int array[n];
 ….
}

void main () {
 function<1+2,2>(8);
}
模板
无效函数(int x=n){
双y=m;
整数数组[n];
….
}
空干管(){
功能(8);
}

编译函数时,x是3还是8(因为n只是默认参数)?

在您的示例中,
n
是3,
x
是8。实际参数值优先于默认值。

该代码有什么好处

模板非类型参数必须是结构类型(不能为双精度)。看

因此,如果将
double
更改为
int
,则VAR将为
x=8
n=3
m=2


另一件事是将
void main()
更改为
int main()
。请参见

n在调用函数时只是变成类型。int在你的例子中,当你调用函数(8)时,它显示在我课程中的一张幻灯片中。这纯粹是为了教育目的,没有真正的效用。非常感谢。