为什么“n”在此函数中没有增加?

时间:2013-10-09 10:08:14

标签: c++

我的代码:

#include <iostream>
#include <vector>
#include <algorithm>

int test_n(std::vector<int>::iterator b, std::vector<int>::iterator e, int &n)
{
    n++;    
    std::vector<int>::difference_type l = e-b;

    if (l<100) return std::accumulate(b, e, 0);

    std::vector<int>::iterator tmp = b + l/2;
    int nL = test_n(b, tmp, n);
    int nR = test_n(tmp, e, n);

    return nL + nR;
}

int main()
{
    int n=0;
    std::vector<int> v;

    for (int i=1; i<1000; i++) v.push_back(i);
    std::cout << test_n(v.begin(), v.end(), n) << " (n=" << n << ")\n";
    return 0;
}

为什么n至少不会增加一次?

1 个答案:

答案 0 :(得分:12)

n递增。只是C ++没有在语句中评估参数的固定顺序。因此,在您调用test_n(结尾前的std::cout行)的语句中,编译器可能首先决定检查n的值,然后才调用{{1得到它的输出。

我的建议:分开调用 - 在cout之前执行test_n,你应该看到更改。 所以:

test_n

参见例如问题Compilers and argument order of evaluation in C++有关在C ++中评估参数的顺序的详细信息。