C++ cout<<&引用\";[i==n-1];工作
我不知道C++ cout<<&引用\";[i==n-1];工作,c++,C++,我不知道[I==n-1]在这种情况下是如何工作的 for (int i = 0; i < n; i++) { cout << a[i] << " \n"[i == n - 1]; } for(int i=0;i
[I==n-1]
在这种情况下是如何工作的
for (int i = 0; i < n; i++) {
cout << a[i] << " \n"[i == n - 1];
}
for(int i=0;i“\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] << ' ';
}
}
for(int i=0;i cout表达式i==n-1
是一个布尔表达式,其计算结果为1
(真)或0
(假)
“\n”
是由3个字符值组成的数组:
空格
(0x32)
\n
(0x0D)
NULL
(0x00)
因此,根据i
是否是数组a
的最后一个索引,完整表达式将计算到空间
或\n
带有cout的complete for循环将打印空格,直到i
位于数组末尾,然后最终将在最后一个元素之后打印\n
这很聪明,但令人困惑。我会告诉程序员找到更好的方法
我可能更喜欢使用三元运算符(?:
)
for(int i=0;i 难道有人想变得超级聪明吗?:false
为零,true
为一。你可以做很多棘手的事情(而且是不必要的)与数组有关的事情。为了使他们的混淆尝试更成功,请用std::回复。他们是否从中获得了任何明显的性能改进?只有他们的探查器可以确定。分支可能非常慢,因此他们可能一直在试图避免它们,但I/O速度要慢得多,因此没有任何区别。如果只构建一个str,可能会很有用但也有更清晰的方法。
for (int i = 0; i < n; i++) {
cout << a[i] << (i == n - 1) ? "\n" : " ";
}