我对C ++比较陌生。我刚刚阅读了关于类型推导的auto关键字。我试过在几个函数中实现它只是为了发现它在处理数学运算符时引起了各种各样的问题。我相信发生的事情是当我实际需要浮点除法(变量'i'和'avg')时,我的函数开始实现整数除法。我使用下面的自动关键字发布了代码。
现在,当我明确地将变量声明为浮点数时,函数运行正常。
这是一个使用auto不首选的例子吗?但是,我确实可以看到它们在生成迭代器时会有所帮助。
namespace Probability
{
/* ExpectedValueDataSet - Calculates the expected value of a data set */
template <typename T, std::size_t N>
double ExpectedValueDataSet(const std::array<T, N>& data)
{
auto i = 0;
auto avg = 0;
for(auto it = data.begin(); it != data.end(); it++)
{
i = it - data.begin() + 1;
avg = ((i-1)/i)*avg + (*it)/i;
}
std::cout << avg << " \n";
return avg;
}
};
答案 0 :(得分:9)
文字0
的类型为int
。
因此变量auto avg = 0;
的类型为int
。
文字0.0
(或例如3.14
)的类型为double
,这就是您想要的。
作为一般规则,使用auto
进行变量声明
在初始值设定项中明确指定了类型,或
类型非常冗长,就像某些迭代器类型一样。
但是没有理由不使用它。 :)
如果是例如审美原因要保持i
为整数,然后重写计算
((i-1)/i)*avg + (*it)/i
到例如。
((i-1)*avg + *it)/i
避免(i-1)/i
的纯整数运算。