【发布时间】:2012-07-29 05:58:24
【问题描述】:
我最近在代码库中看到了以下内容:
bool bRes = (a < b) ? a=b, true : false;
如果a < b,则a=b 被执行并且bRes 为真。
这里到底发生了什么?条件运算符的文档没有提到任何关于链接表达式的内容。
编辑:要明确的是,我得到了条件运算符部分,这是 a=b, true 作为一个让我感到困惑的表达式。
【问题讨论】:
我最近在代码库中看到了以下内容:
bool bRes = (a < b) ? a=b, true : false;
如果a < b,则a=b 被执行并且bRes 为真。
这里到底发生了什么?条件运算符的文档没有提到任何关于链接表达式的内容。
编辑:要明确的是,我得到了条件运算符部分,这是 a=b, true 作为一个让我感到困惑的表达式。
【问题讨论】:
哇。这是comma operator 的用法。 a=b, true 完全按照你说的做。它执行每个表达式并得出最后一个表达式的值。
【讨论】:
这是一个正确的代码,但写的风格很奇怪。该语言允许以这种方式使用逗号运算符。
等价于
bool bRes;
if (a < b)
{
a = b;
bRes = true;
}
else
bRes = false;
【讨论】:
bRes 声明为const...
const bool bRes = a < b; if (bRes) a = b; 怎么样?
bool w = condition ? true : false 或if-等价于您的示例的代码。