如果(1,true)是什么意思
what does - if(1, true) - mean?
我遇到了这个代码:
if (1, true) {/*...*/}
它到底是什么意思?当评估结果为真时:
void foo(){}
...
if(1, foo()) {/*...*/}
这不会编译:
void foo(){}
...
if (1 == foo()) {/*...*/}
显然是因为编译器期望foo((返回一些整数值。我以为逗号可以翻译成某种运算符。if子句中的逗号在内部翻译成什么了吗?
逗号运算符只计算左操作数,然后计算右操作数。所以像这样的表达
(1, true)
首先计算1
,然后计算true
,得到表达式值true
。
在这种特殊情况下,逗号运算符的使用似乎毫无意义。
逗号运算符返回右操作数的结果,并丢弃左操作数的结论。计算两个操作数,先向左,然后向右。
这是逗号运算符。它计算1,然后计算true
,然后检查true
是否为真,因此它执行if.
正如其他人所解释的,这是逗号(或顺序求值(运算符。
然而,第二个代码片段也不起作用,请参阅gcc 4.3.4的输出。逗号运算符按从左到右的顺序执行所有操作数,将每个操作数视为一个子表达式,并返回链中最后一个表达式的值。由于foo()
返回void
,因此表达式不正确。如果你的编译器接受了它,那就违反了语言标准。
逗号运算符。评估从左到右。结果是最右边表达式的结果。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思