泛型初始化中的歧义

时间:2014-03-26 10:55:25

标签: c++ most-vexing-parse

采用以下简单的模板功能,可以正常工作:

template<typename T>
double Average(T tArray[], int nElements)
{
    T tSum = T(); // tSum = 0
    for (int nIndex = 0; nIndex < nElements; ++nIndex)
    {
        tSum += tArray[nIndex];
    }
    return double(tSum) / nElements;
}

我已将第一行更改为T tSum()并且未编译,因为编译器认为tSum是一个函数,不能在for循环中的+运算符中使用。您能否告诉我以下类型的泛型类型的初始化有什么区别?

  • 输入var = Type();
  • 输入var();

我认为可以替换这些行,因为例如int var()int var = int()都是相同的!

1 个答案:

答案 0 :(得分:1)

Type var();声明一个函数。 Type var = Type()就是你想要的。

请参阅http://en.wikipedia.org/wiki/Most_vexing_parse

在C ++ 11中,您可以使用Type var{};

相关问题