This question already has answers here:
Closed 4 years ago.
Errors using ternary operator in c
(5个答案)
(k < m ? k++ : m = k)
这个特殊的表达式给出编译时错误,说明需要左值问题在于k++无法理解这个表达式中的错误。

最佳答案

输入

k < m ? k++ : m = k;

被解析为
((k < m) ? k++ : m) = k;

其中,k++是一个右值,m是一个左值。所以条件是一个右值。
你可能是说
(k < m) ? k++ : (m = k);

更好的使用
if (k < m) {
    k++;
} else {
    m = k;
}

相反。
您可以在这里看到C优先级表:http://en.cppreference.com/w/c/language/operator_precedence
术语“左值”和“右值”主要是指“你可以在作业左边写的东西”和“你只能在作业右边写的东西”。到岸价“Are literal strings and function return values lvalues or rvalues?”。
一个更容易理解?:语义的例子:对于uint8_t k来说,condition ? k : k + 1是什么意思?
前一部分k是一个类型为uint8_t的左值。
不过,后一种表达方式要复杂一些。作为算术表达式的结果,它是一个右值它也不是k + 1而是uint_8
intuint8_t的常见类型是int因此,totalint是一个类型为condition ? k : k + 1的rvalue表达式。

关于c - C中的三元条件运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26491494/

10-12 15:01
查看更多