我在意外删除方法名称时出现此问题。代码来自
bool bRet = MethodName(pData, pOutFilename);
到
bool bRet = (pData, pOutFilename);
但仍然编译?这段代码有什么作用?这是什么意思?它似乎返回true,总是这样(即使pData为null)?
欢迎任何想法!
答案 0 :(得分:37)
计算其第一个操作数并丢弃结果,然后 计算第二个操作数并返回该值(和类型)。
答案 1 :(得分:17)
您的表达式bool bRet = (pData, pOutFilename);
是一个有效的表达式,它等同于表达式bool bRet = pOutFilename;
在bool bRet = (pData, pOutFilename);
中,首先计算表达式pData
,然后计算第二个表达式pOutFilename
,然后将第二个表达式的值赋给bRet
(这就是{ {1}}运算符从左到右工作。
逗号运算符
,
有,
。两个表达 用逗号分隔从左到右进行评估。左操作数是 总是评估,所有副作用都在右边完成 操作数被评估。
要了解括号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);
}
要了解输出:look at precedence table 20
30
的优先级低于,
。在表达式中,您使用括号覆盖优先级。
答案 2 :(得分:4)
它是,
comma operator。如果你有这样的表达式:
i = (a, b);
b
将存储到i
。
所以在你的情况下:
bRet = pOutFilename;
pOutFilename
将存储到bRet
。