条件表达式中的类型推断
条件运算符 (?:) 是 C 中的一个强大工具,可以实现简洁且富有表现力的代码。但是,了解此运算符的结果类型对于正确使用至关重要。
考虑以下代码示例:
int x = 1; int y = 2; (x > y ? x : y) = 100;
在这种情况下,第一个条件运算符的计算结果为右值int 类型,因为两个操作数都是 int 类型。因此,赋值是有效的。
但是,在以下示例中:
int x = 1; long y = 2; (x > y ? x : y) = 100;
条件运算符无法计算为左值,因为第二个和第三个操作数的类型不同。因此,对此表达式的赋值无效:
error: lvalue required as left operand of assignment | (x > y ? x : y) = 100; | ~~~~~~~^~~~~~~~
要理解此行为,我们需要深入研究 C 中值类别的概念。
条件表达式继承其类型并来自其操作数的值类别。如果两个操作数都是左值,则条件表达式也是左值。如果其中一个操作数是右值,则条件表达式也是右值。
在第一个示例中,x 和 y 都是同一类型的左值,因此条件表达式的计算结果为 int 类型的左值。在第二个示例中,x 是左值,但 y 是右值,因此条件表达式无法计算为左值。
请务必记住,条件运算符的值类别是在编译时确定的。即使条件计算结果为 false,条件表达式的类型和值类别也必须保持一致。这符合赋值运算符的左侧必须是左值的规则。
以上是C 类型推断如何影响条件表达式的左值/右值行为?的详细内容。更多信息请关注PHP中文网其他相关文章!