【发布时间】:2021-09-26 16:07:18
【问题描述】:
我们知道条件运算符返回一个左值,如果它的Expr2 和Expr3 是相同类型的左值,否则它返回一个右值:
int main(){
int a = 0, b = 0;
(a == 1 ? a : b) = 1; // C++ OK. C: error. lvalue needed
return 0;
}
- 上面的代码在 C++ 上编译罚款,而在 C 上编译失败。
这是 C 上的输出:
main.c: In function ‘main’:
main.c:8:20: error: lvalue required as left operand of assignment
(a == 1 ? a : b) = 1;
^
【问题讨论】:
-
我很确定在 C 中,条件运算符总是产生一个右值,而不是一个左值。标准中似乎没有明确说明,但确实会产生左值的运算符被特别提及,
?:没有。 -
“我们知道”后跟虚假陈述
-
如果两个操作数都是左值,你可以通过
*(a==1 ? &a : &b)得到一个左值结果