当我不小心删除了方法名称时,我遇到了这个问题。代码来自
bool bRet = MethodName(pData, pOutFilename);
至
bool bRet = (pData, pOutFilename);
但仍然编译?这段代码有什么作用?这是什么意思?似乎返回 true,是否总是这样(即使 pData 为空)?
欢迎任何想法!
它是“逗号运算符”
计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)。
你的表达式bool bRet = (pData, pOutFilename);
是一个有效的表达式,它等同于表达式bool bRet = pOutFilename;
在bool bRet = (pData, pOutFilename);
中,计算第一个表达式pData
,然后计算第二个表达式,然后将第二个表达式pOutFilename
的值分配给bRet
(这就是,
运算符从左到右的工作方式)。
阅读:逗号运算符:,
逗号运算符
,
有left-to-right associativity
. 用逗号分隔的两个表达式从左到右求值。总是计算左操作数,并且在计算右操作数之前完成所有副作用。
要了解括号( )
在表达式中的重要性,请考虑下面的示例。观察此示例中的输出(我有 C 示例):
int main () {
int i = 10, b = 20, c= 30;
i = b, c; // i = b
printf("%i\n", i);
i = (b, c); // i = c
printf("%i\n", i);
}
输出:
20
30
要了解输出:查看优先级表 ,
的优先级低于=
. 在您的表达式中,您已经使用括号覆盖了优先级。