簡體   English   中英

cout << " \n"[i == n - 1]; 工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM