C++ 无法理解三元运算符的用法

C++ 无法理解三元运算符的用法,c++,C++,有人将此作为解决方案发布,我无法从整体上理解它,尤其是while循环。 问题是我有一个n数字数组,我必须打印数组中最大元素出现的次数 #include <iostream> int main(){ int c, n, max = 0; std::cin.ignore(); while(std::cin >> n) max < n ? c = !!(max = n) : c += max == n; std::cout

有人将此作为解决方案发布,我无法从整体上理解它,尤其是while循环。 问题是我有一个
n
数字数组,我必须打印数组中最大元素出现的次数

#include <iostream>

int main(){
    int c, n, max = 0;
    std::cin.ignore();
    while(std::cin >> n)
        max < n ? c = !!(max = n) : c += max == n;
    std::cout << c;
    return 0;
}
#包括
int main(){
int c,n,max=0;
std::cin.ignore();
而(标准::cin>>n)
maxstd::cout似乎有人试图使此代码尽可能短。对于程序来说,这很少是一个好的目标。我们可以一步一步地取消对代码的点击,以返回到更合理的位置

首先,三元运算符
max
可以转换为:

if (max < n) {
    c = !!(max = n);
} else {
    c += max == n;
}
最后,
c+=max==n
是一种仅在
max==n
时增加
c
的“聪明”方法:

if (max == n){
    c++;
}
总之,while循环的主体是:

if (max < n) {
    max = n;
    c = 1;
} else if (max == n){
    c++;
}
if(最大值

在实际代码中,可读性会导致将来的可维护性,如果有人在工作中给我看这段代码,我会让他们重写。缩短代码没有任何好处(显然,除非它包含不必要的操作并且可以简化)在某些情况下,它实际上会妨碍编译器的优化。

双重逻辑不是,如果你不介意的话,将值转换为
bool
c=!!(max=n);
是一种“聪明”的方法,可以将
c
设置为1…,-通常,
c
也可以设置为0。@adziri我说过“如果n为0,它会失败”,代码的目的是将
c
设置为1,但聪明引入了bug@3Dave只要代码都能放在一个单独的语句中,其他什么都不重要,欢迎来到竞争的世界programming@AlanBirtles我和一个家伙一起工作,他确信空格会损害运行时性能。这是一场噩梦。
if (max < n) {
    max = n;
    c = 1;
} else if (max == n){
    c++;
}