for循环中的多次初始化

multiple initializations in for loop

我正在尝试编写一个函数来查找数字的平均值,起初我将代码编写为

double CPPLib::average_of_numbers(std::vector<int> &numbers){
    double result = -1;
    if(numbers.size() != 0)
    {
        result = 0;
        for(int i=0;i< int(numbers.size());i++)
        {
            result += numbers[i];
            std::cout << result << std::endl;
        }
        std::cout << result << std::endl;
        result = result/numbers.size();
        std::cout << result << std::endl;
    }
    return result;
}

对于输入 {1,2,3,4,5} 上面的代码工作正常并打印 1个 3个 6个 10 15 15 3个 3个 .但是当我试图在“for”循环初始化中包含 result = 0 时,在代码

中显示的 loop.as 之后,我得到的结果为 -1
double CPPLib::average_of_numbers(std::vector<int> &numbers){
    double result = -1;
    if(numbers.size() != 0)
    {
        
        for(int i=0,result = 0;i< int(numbers.size());i++)
        {
            result += numbers[i];
            std::cout << result << std::endl;
        }
        std::cout << result << std::endl;
        result = result/numbers.size();
        std::cout << result << std::endl;
    }
    return result;
}

结果显示为 1个 3个 6个 10 15 -1 -0.2 -0.2 你能告诉我这是为什么吗? 非常感谢。

在您的第二个示例中,您实际上声明了两个名为 result 的独立变量。第一个在函数的顶部。

double result = -1;

另一位在这里:

    for(int i=0,result = 0;i< int(numbers.size());i++)

您已经声明了一个名为 result(除了 i)的临时 int,其生命周期和范围都在 for-loop.它覆盖了之前声明的外部 result 。当 for-loop 退出时,对 result 的引用返回到之前声明的原始变量。

最简单的解决方法是按照您在第一个示例中所做的操作进行操作。在循环外显式设置 result=0