cout << i << " \n"[ i == n ] 这个表达式是做什么用的?

9
在这个声明中,
for (i = 1; i <= n; i++) {
    cout << i << " \n"[ i == n ];
}

这个 cout 语句中的最后一个项 [i==n] 是在做什么?我猜这个循环会打印以空格分隔的数字。

1
可能是重复的问题,参考如何获取字符串的第n个字符? - underscore_d
1
@underscore_d:绝对不是。请注意 [ i==n ] 中的不寻常表达方式。 - MSalters
1
通过标准布尔逻辑运算,i == n 会变成 0 或者 1。所以,一旦有人理解了 "foo"[bar] 的含义,对于 "foo"[i == n] 的理解对我来说就显得微不足道了。 - underscore_d
2个回答

15

这是一种写作方式不太直白的表达:

(i == n ? '\n' : ' ')

也就是说,当i == n时,打印一个换行符,否则打印一个空格。

这个想法是通过空格分隔数字,并在所有数字都被打印后放置一个换行符。


1
以前从未见过这个! - CinCout

7

将字符' '或字符'\n'作为索引是一种愚蠢的方式。以下代码实现相同的功能并输出"Hello World":

#include <iostream>

int main() {
        for (int i = 0; i < 11; i++)
                std::cout << "Hello World"[i];
        return 0;
}

i == n 可能是 true 或者 false。当用 [i == n] 进行索引时,将其转换为整数,您将得到第一个或第二个元素。


真正正确地使用愚蠢的限定符(它应该被标准化)! - Oliv
太棒了!只是,为了提高质量,我会交换[]的参数。i["Hello World"]。;-) - Arne Vogel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接