C++ Auto 关键字 - Float 与 Int 问题
C++ Auto Keyword - Float vs Int Trouble
我对 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
的类型为 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
的纯整数运算。
我对 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
的类型为 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
的纯整数运算。