C++中复杂的条件运算符理解

img
划线部分怎么理解?

?表达式可以转换成if-else语句,这么写你就明白了。


char x[2][20];
    const char* y = "";
    string s;
    for (int i = 0; i < 3; i++)
    {
        if (i < 2)
        {
            if (!i) cout<< x[i];
            else cout<< y;
        }
        else
        {
            cout<<x[1];
        }
    }

这个主要是三元运算符a<b?a:b,先判断问号前面的内容是否为真,如果是真则取冒号前面的值,为假则取冒号后面的值。
在这道题里,先判断i是不是小于2,是的话取值!i,!是非的意思,如果i=0,那么!i=1,如果i不等于0,!i=0