【发布时间】:2011-01-07 07:49:24
【问题描述】:
有人能解释一下这是如何工作的吗?
int x, y;
....
(some_condition ? x : y) = 100;
这是打算工作还是只是“盲目”翻译或编译器(类似于vec[10] 等于10[vec])?
【问题讨论】:
标签: c++ c programming-languages syntax
有人能解释一下这是如何工作的吗?
int x, y;
....
(some_condition ? x : y) = 100;
这是打算工作还是只是“盲目”翻译或编译器(类似于vec[10] 等于10[vec])?
【问题讨论】:
标签: c++ c programming-languages syntax
这是有效的 C++ 和无效的 C。
条件表达式的结果可以是(在这种情况下是)C++ 中的 左值,它引用 x 或 y 之一,具体取决于 some_condition 的计算结果是否为 @987654324 @。在 C++ 中,如果 some_condition 在转换为 bool 时为 true,则为 x 分配值 100,否则为 y 分配值 100。
在 C 中,条件表达式的结果绝不是 左值,不能赋值。
【讨论】:
*(some_condition ? &x : &y) = 100;
-std=c99 开关。
至少在 C++ 中,该代码 sn-p 本质上等同于:
if(some_condition)
{
x = 100;
}
else
{
y = 100;
}
这是由 C++ 标准保证的,尽管您必须仔细阅读相关部分。运算符的规则出奇的复杂(主要是由于执行了类型转换),所以条件运算符和 if-then-else 语句并不总是完全等价的。
但是,在您上面的代码 sn-p 中,标准中的这一段是相关的:
5.16/4 条件运算符:
如果第二个和第三个操作数是左值并且具有相同的类型,则结果是该类型并且是左值。
【讨论】:
if elseconstruct 不存在。
这是一个与这段代码结果相同的表达式:
if (some_condition)
x = 100;
else
y = 100;
【讨论】:
如果 x 和 y 是左值,则三元表达式是左值。
讨论here
【讨论】:
不,它是 if 条件的简写形式。就像
if(somecondition)
{
x = 100;
}
else
{
y = 100;
}
【讨论】:
x 和 y 都是相同类型的左值。 我不认为这段代码有什么盲点。 但是你可能会发现一些编译器无法编译这段代码。
我通常更喜欢使用 if/else 代码,它产生完全相同的代码并且对维护者来说更具可读性。 如果您想跟踪错误,将每个分支放在单独的分支上更容易设置断点。
代码覆盖控制也更容易检查。
【讨论】:
您根据条件分配给x 或y。
【讨论】:
它看起来像一个选择左值的三元运算符。我不知道这可以做到,但我认为这很有意义。根据条件,两个值(x 或 y)之一将被分配数字 100。
如果它有效,那就太酷了!
【讨论】:
它旨在工作。
三元运算符 ?: 如果两个可能的结果都是左值,则可以产生一个左值(即您可以分配的东西),就像在您的示例中一样。
因此,您的示例根据其他值为 x 或 y 分配一个值。
【讨论】:
将 x 或 y 的值替换为 100 取决于条件。返回的时候也一般使用-
return condition ? x : y ; // If condition is true => return x else return y
【讨论】: