C++ 17如果为while循环的init?

KcF*_*nMi 2 c++ c++14 c++17

对于一些家庭工作,我正在做以下事情:

int main() {

    ofstream file("log.txt");

    file << setw(5)  <<  "i"
         << setw(15) <<  "h"
         << setw(15) <<  "n"
         << setw(15) <<  "sum"
         << setw(15) <<  "diff"
         << endl;

    auto write2file = [&file](int i, double h, double n, double sum, double diff) {
        file << setw(5)  << i
             << setw(15) << h
             << setw(15) << n
             << setw(15) << sum
             << setw(15) << diff
             << endl;
    };

    double a = 0;
    double b = 2;
    int n = 1;
    double h = (b-a)/n;
    double sum = sum_analytic;
    double diff = 1;

    while (diff > pow(10, -4)) {
        h = (b-a)/++n;
        sum = ntgrt(a, b, n, h);
        diff = abs(sum - sum_analytic);

        static int i = 0;
        write2file(++i, h, n, sum, diff);
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到C++ 17的if init功能(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html),当我宣布时,我会在这里看到相同的模式h,sumdiff外面while循环,但他们只是内部使用.

有没有更好的方法来编写它,可能会利用C++ 17的功能?

Nic*_*las 13

然后你想要的是一个for循环:

for(double diff = 1; diff > pow(10, -4);)
{
    double h = (b-a)/++n;
    double sum = ntgrt(a, b, n, h);
    diff = abs(sum - sum_analytic);
    ....
}
Run Code Online (Sandbox Code Playgroud)

添加此功能没有意义,while因为您可以使用for和取消增量语句.

  • 我认为这是一个很好的答案。将变量保持在循环范围内的好方法,就像 C++ 核心指南建议的那样。谢谢。 (2认同)
  • `#define whileinit(init, test) for(init; (test);)` (并不是说你应该这样做) (2认同)