泛型类型初始化的模糊性

Ambiguity in generic type initialization

本文关键字:模糊性 初始化 泛型类型      更新时间:2023-10-16

使用下面这个简单的模板函数:

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循环中的+操作符中使用。你能告诉我以下这些泛型类型的初始化有什么区别吗?

  • Type var = Type();
  • 类型var ();

我认为有可能替换这些行,考虑到例如int var()int var = int()是相同的!

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

见http://en.wikipedia.org/wiki/Most_vexing_parse

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