【问题标题】:Ambiguity in generic type initialization泛型类型初始化中的歧义
【发布时间】:2014-03-26 10:55:24
【问题描述】:

采用以下可以正常工作的简单模板函数:

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() 是相同的,我认为可以替换这些行!

【问题讨论】:

标签: c++ most-vexing-parse


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复,但Type var; 导致错误结果,因为它不包含数字类型的零初始化。如果你运行代码,它总是返回一个很大的负数。
  • C++03中最通用的方式是Type var = Type();
猜你喜欢
  • 2019-10-06
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多