[英]How does cout << " \n"[i == n - 1]; work?
我不明白[i == n-1]
在這種情況下是如何工作的
for (int i = 0; i < n; i++) {
cout << a[i] << " \n"[i == n - 1];
}
表達式i == n-1
是一個 boolean 表達式,其計算結果為1
(真)或0
(假)。
" \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" : " ";
}
字符串文字" \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] << ' ';
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.