我认为这些不会编译,但他们会:
if (a>>b&&c&&d)
if (month==1,2,3,5,7,9,10)
第一个我无能为力。在第二个语句中,逗号应该是(||)还是运算符? 语法明智是这样总是这样或者它是不久前推出的?
我正在使用Visual Studio 2010。
答案 0 :(得分:3)
if (a>>b && c && d)
等于
if ((a>>b) && c && d)
如果a
向右移b
次的结果评估为bool
,c
和d
也分别评估为bool
,然后所有这些布尔将彼此 AND - 。
在您的上下文中,将评估逗号中的所有表达式,然后将最后一个表达式传递给if
表达式:
if (month==1,2,3,5,7,9,10) -> is equal to
if (2,3,5,7,9,10) -> is equal to
if (3,5,7,9,10) -> is equal to
if (5,7,9,10) -> is equal to
if (7,9,10) -> is equal to
if (9,10) -> is equal to
if (10)
总是true
。
不应该是||
或&&
。如果您想要 OR 或 AND ,请按以下方式编写:
if (month==1 || month==2 || month==3 || ....)
或
if (month==1 && month==2 && month==3 && ....)
// Also month can not simultaneously be equal to more than one value!
// then, it's equal to
if (false)
答案 1 :(得分:2)
第一个if语句将被评估为:
if(((a >> b) && c) && d)
基本上按a
位进行位移b
,然后是逻辑和c
然后再用d
第二个是comma operator,它将评估第一个术语并将其丢弃,然后是第二个术语,依此类推并返回最终术语的结果。所以在我们的例子中,该陈述等同于:
if(10)
总是如此。