0

之间有什么区别(如果有的话)

template <typename T, int N>
void input (T (&Array) [N])
{
    for (T& val: Array) cin >> val;
}

template <typename T>
void input (T (&Array))
{
    for (auto& val: Array) cin >> val;
}

void input (auto& Array)
{
    for (auto& val: Array) cin >> val;
}

?

哪个更好?

他们都可以正常工作double store[5]但不能正常工作vector <double> store

旁注:第一个版本无法编译,T (&Array) []因为它是“对未知边界数组的引用”。T& val: Array如果我们改为编写,第二个将不会编译。

4

2 回答 2

0

正如弗兰克指出的那样,第一个版本只接受数组,而第二个和第三个版本也可以接受一个vectorlist

第二个和第三个版本似乎无法使用,vector <double> store因为for当向量为空时不会执行循环。

将其替换为vector <double> store (5, 0)

于 2018-05-30T16:25:49.567 回答
0

在数组参数的情况下,这些都具有相同的行为。在第一个T中推导出元素类型;在其他人中,Tauto推导出数组类型。

当然,第二种和第三种形式(它们是等价的,只是你不能为这种形式编写特化auto)允许传递非数组参数。

于 2018-05-28T01:18:16.190 回答