C++ 默认参数和模板

C++ 默认参数和模板,c++,templates,default-value,C++,Templates,Default Value,为什么此函数会给我一个错误: template < typename T > T foo( T s = 0, const vector < T > &v) { ... } 模板 T foo(ts=0,常数向量&v) { ... } 错误:“模板可求和和(可求和,常数std::vector&)”的参数2缺少默认参数 为什么下面的问题不解决呢 template < typename T > T foo( const vector < T

为什么此函数会给我一个错误:

template < typename T >
T foo( T s = 0, const vector < T > &v)
{
    ...
}
模板
T foo(ts=0,常数向量&v)
{
...
}
错误:“模板可求和和(可求和,常数std::vector&)”的参数2缺少默认参数

为什么下面的问题不解决呢

template < typename T >
T foo( const vector < T > &v, T s = 0)
{
    ...
}
模板
T foo(常数向量&v,ts=0)
{
...
}

可选参数必须是最后一个。也就是说,非可选参数不能跟在可选参数后面

你怎么打电话

T foo( T s = 0, const vector < T > &v)
tfoo(ts=0,常量向量&v)
只有一个
v
,而没有
s

如果

  • s
    v
    具有相同的类型,或
  • 有一个超负荷的
    foo
    只取一个
    常量向量&

可选参数必须是最后一个。也就是说,非可选参数不能跟在可选参数后面

你怎么打电话

T foo( T s = 0, const vector < T > &v)
tfoo(ts=0,常量向量&v)
只有一个
v
,而没有
s

如果

  • s
    v
    具有相同的类型,或
  • 有一个超负荷的
    foo
    只取一个
    常量向量&

如果参数具有默认值,则以下所有参数也需要具有默认值

其他答案中给出了基本原理,因此我将引用C++11标准:

8.3.6默认参数[dcl.fct.Default]

4(…)在给定函数声明中,在 带有默认参数的参数应具有默认参数 在本声明或先前声明中提供,或应为函数 参数包


若参数有默认值,则以下所有参数也需要有默认值

其他答案中给出了基本原理,因此我将引用C++11标准:

8.3.6默认参数[dcl.fct.Default]

4(…)在给定函数声明中,在 带有默认参数的参数应具有默认参数 在本声明或先前声明中提供,或应为函数 参数包


具有默认值的参数必须是最后一个参数。在第一种情况下,s的默认值为0,然后v的默认值为0。不能在具有默认值的参数之后有无默认值的参数


您将如何使用参数的默认值调用该参数
foo(/*default*/,vector)

具有默认值的参数必须是最后一个参数。在第一种情况下,s的默认值为0,然后v的默认值为0。不能在具有默认值的参数之后有无默认值的参数


您将如何使用参数的默认值调用该参数
foo(/*default*/,vector)

谢谢,回答得很好!谢谢,回答得很好!可能的重复。可能的重复。