【发布时间】:2017-05-27 20:34:13
【问题描述】:
对于一些家庭作业,我正在做以下工作:
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);
}
}
考虑到 C++17 if init 功能 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html) 当我在 while 循环之外声明 h、sum 和 diff 时,我在这里看到了相同的模式,但它们仅在内部使用。
有没有更好的写法,可能是利用 C++17 的特性?
【问题讨论】:
-
只是好奇:
n似乎是一个简单的迭代变量,但您没有提到它仅在循环内部使用。你在其他地方也需要吗?如果没有,您可以查看this 问题的答案。 (假设您选择 Nicol Bolas 的方式,并且只使用for循环而不是while循环。)