C++ ()运算符的返回值

C++ ()运算符的返回值,c++,C++,我的方法的最后一行应该是 return methodName(xxx,xxx); 但我把它当作 return (xxx,xxx); 方法返回类型是bool,我只是在调试问题时才注意到输入错误。我没想到会返回(xxx,xxx)编译。它到底做了什么 ()运算符的返回值 这不是()运算符的调用。()运算符的语法要求调用的函数或变量的标识符。在没有标识符的情况下,表达式周围的括号用于分组子表达式,并且可能会更改操作的执行顺序。例如:1-(2-3)将后两个操作数分组,结果不同于1-2-3。下面是一个括

我的方法的最后一行应该是

return methodName(xxx,xxx);
但我把它当作

return (xxx,xxx);
方法返回类型是bool,我只是在调试问题时才注意到输入错误。我没想到
会返回(xxx,xxx)编译。它到底做了什么

()运算符的返回值

这不是()运算符的调用。()运算符的语法要求调用的函数或变量的标识符。在没有标识符的情况下,表达式周围的括号用于分组子表达式,并且可能会更改操作的执行顺序。例如:
1-(2-3)
将后两个操作数分组,结果不同于
1-2-3
。下面是一个括号调用函数的示例:
1-cos(2-3)

在您的例子中,没有同级表达式,因此括号不会更改任何内容的顺序,并且表达式与

return xxx,xxx;
这是对逗号运算符的调用,类似于:

xxx;
return xxx;
只要
xxx
可以隐式转换为函数的返回类型,这是格式良好的

()运算符的返回值

这不是()运算符的调用。()运算符的语法要求调用的函数或变量的标识符。在没有标识符的情况下,表达式周围的括号用于分组子表达式,并且可能会更改操作的执行顺序。例如:
1-(2-3)
将后两个操作数分组,结果不同于
1-2-3
。下面是一个括号调用函数的示例:
1-cos(2-3)

在您的例子中,没有同级表达式,因此括号不会更改任何内容的顺序,并且表达式与

return xxx,xxx;
这是对逗号运算符的调用,类似于:

xxx;
return xxx;

只要
xxx
可以隐式转换为函数的返回类型,这是格式良好的。

逗号
运算符将返回所提供列表中的最后一个元素


返回(a,b,c)
等于
返回c
,即其返回的最后一个元素
c

逗号
操作符将返回所提供列表中的最后一个元素


返回(a,b,c)
等于
返回c
,即其返回的最后一个元素
c

方法返回类型为bool
是这里的重点

< C++的主要目的是评估表达式和

return (expression1,expression2);
您有两个表达式,即
expression1
expression2
,它们是一个接一个地求值的(逗号-它只是一个分隔符-执行此位)

由于
expression2
排在最后,因此将返回它的求值结果。如果
expression2
返回非零值,则返回值将为
true
,如果不是
false



旁注:虽然
可以重载,但从问题中可以清楚地看出,您使用它只是作为分隔符

方法返回类型为bool
,这一点很重要

< C++的主要目的是评估表达式和

return (expression1,expression2);
您有两个表达式,即
expression1
expression2
,它们是一个接一个地求值的(逗号-它只是一个分隔符-执行此位)

由于
expression2
排在最后,因此将返回它的求值结果。如果
expression2
返回非零值,则返回值将为
true
,如果不是
false



Sidenote:虽然
可以重载,但从问题中可以清楚地看出,您使用它只是作为分隔符

不确定如何输入正确的术语,但在您的示例中,没有
操作符()
,它只是普通的方括号comma操作符。C语言的一个怪癖,基本上是无用的。我不知道如何使用正确的术语,但在您的示例中,没有
操作符()
,它只是普通的方括号comma操作符。C的一个怪癖,而且基本上是无用的。imho“表达式周围的括号用于分组子表达式”并不能准确地解决OP的混淆,因为函数调用操作符也可以只是表达式周围的括号,如
methodName(xx,xx)@tobi303我对为什么这不是对操作符()thx的调用进行了一些扩展,顺便说一句,这不仅仅是为了抱怨而抱怨,我不知道如何恰当地表达它,而你的解释现在听起来很合理。@tobi303这并不是为了抱怨而抱怨。我觉得这是合理的建设性批评,我对此表示赞赏。事实上,当您发表评论时,我已经想到了同样的事情,并且已经在编写我的编辑。imho“表达式周围的括号用于分组子表达式”并不能完全解决OP的困惑,因为函数调用操作符也可以只是表达式周围的括号,如
methodName(xx,xx)@tobi303我对为什么这不是对操作符()thx的调用进行了一些扩展,顺便说一句,这不仅仅是为了抱怨而抱怨,我不知道如何恰当地表达它,而你的解释现在听起来很合理。@tobi303这并不是为了抱怨而抱怨。我觉得这是合理的建设性批评,我对此表示赞赏。事实上,当你发表评论时,我已经想到了同样的事情,并且已经在写我的编辑了。如果表达式a和b有副作用,这并不等于
返回c
。当然了,b&c可以是语句,但这里我的意图仅在于方法的返回值。如果表达式a和b有副作用,它不等于返回c。当然,a,b&c可以是语句