This question already has answers here:
Closed 4 years ago.
Errors using ternary operator in c
(5个答案)
这个特殊的表达式给出编译时错误,说明需要左值问题在于
被解析为
其中,
你可能是说
更好的使用
相反。
您可以在这里看到C优先级表:http://en.cppreference.com/w/c/language/operator_precedence。
术语“左值”和“右值”主要是指“你可以在作业左边写的东西”和“你只能在作业右边写的东西”。到岸价“Are literal strings and function return values lvalues or rvalues?”。
一个更容易理解
前一部分
不过,后一种表达方式要复杂一些。作为算术表达式的结果,它是一个右值它也不是
(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
。int
和uint8_t
的常见类型是int
因此,totalint
是一个类型为condition ? k : k + 1
的rvalue表达式。关于c - C中的三元条件运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26491494/