2012-07-31 48 views
7

我最近看到的基本代码如下:这是什么奇怪的条件运算符语法?

bool bRes = (a < b) ? a=b, true : false; 

如果a < b,然后a=b执行和bRes是真实的。 这里究竟发生了什么?条件运算符的文档没有提及任何有关链接表达式的内容。

编辑:很清楚我得到的是条件运算符部分,它是a=b, true作为单个表达式让我困惑。

+2

这就是逗号操作... – MFH 2012-07-31 12:57:32

回答

11

Eww。这是comma operator的用法。 a=b, true的确如你所说。它执行每个表达式并产生最后一个表达式的值。

+1

+1 EWW ......是我的第一反应也是如此。 – 2012-07-31 13:05:12

+1

+1 Hahahaha ...你还没有看到真正的“eww”使用逗号运算符。我最喜欢的是[Subbotin的无限范围编码器](http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21)。只要看一下这条线少于30秒,然后尝试解释发生了什么。 – Damon 2012-07-31 13:09:36

+0

非常酷,谢谢! – nolegs 2012-07-31 13:10:58

4

这是一个正确的代码,但写在一个奇怪的风格。该语言允许以这种方式使用逗号运算符。

相当于是

bool bRes; 
if (a < b) 
{ 
a = b; 
bRes = true; 
} 
else 
bRes = false; 
+0

这是编写相同事物的更好方法。做得好! – 2012-07-31 13:16:11

+0

但现在它是分配,而不是初始化。在原来的代码中,我们可能已经声明'bRes'是'const' ... – 2012-07-31 13:24:22

+2

@KerrekSB:好点。怎么样'const bool bRes = a Andrey 2012-07-31 13:27:31