我不知道[i == n-1]在这个场景中是如何工作的
for (int i = 0; i < n; i++) {
cout << a[i] << " \n"[i == n - 1];
}发布于 2021-04-20 02:41:26
Expression i == n-1是一个布尔表达式,计算结果为1 (True)或0 (False)。
" \n"是由3个字符值组成的数组:
Space (0x32)\n (0x0D)NULL (0x00)因此,完整的表达式将计算为Space或\n,这取决于i是否是数组a的最后一个索引。
带有cout的完整的for循环将打印空格,直到i位于数组的末尾,然后在最后一个元素之后打印一个\n。
这是聪明的,但令人困惑。我会告诉程序员去找一个更好的方法。
我可能更喜欢使用三元运算符(? :)
for (int i = 0; i < n; i++) {
cout << a[i] << (i == n - 1) ? "\n" : " ";
}发布于 2021-04-20 02:41:12
字符串文字" \n"的类型为const char[3] (一个用于0结束符),您可以像往常一样访问该数组的元素:
assert(" \n"[0] == ' ');
assert(" \n"[1] == '\n');“索引”i == n-1对于除最后一次迭代之外的所有迭代都是true,它将转换为1 (而false将转换为0)。因此,同样的代码可以写得更具可读性:
for (int i = 0; i < n; i++) {
if ( i == n-1) {
cout << a[i] << '\n';
} else {
cout << a[i] << ' ';
}
}https://stackoverflow.com/questions/67167559
复制相似问题