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 的纯整数运算。