我不知道[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
复制相似问题