围绕返回值的括号 - 为什么?

Fra*_*fer 12 c c++ java

我经常看到这样的代码(C,C++,有时候是Java):

return (value);
Run Code Online (Sandbox Code Playgroud)

我认为这些括号没有任何好处.所以我的问题是,假设程序员return是某种以返回值作为参数的函数,或者这些括号是否有意义?

我知道这里已经提出了类似的问题,但这只与ANSI C有关.我想知道是否有特定于C++或Java的方面尚未得到解答.

Har*_*ris 20

关于C.

括号放在有表达式的地方,并且希望返回值为表达式的值.即使这样也不需要括号.写一些类似的东西是完全可以的

return x + y;
Run Code Online (Sandbox Code Playgroud)

程序员确实使它return (x + y);更具可读性.

所以,括号是一个意见和实践的问题.


关于C++

有一个神秘的案例,括号很重要.引用这个问题

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))
Run Code Online (Sandbox Code Playgroud)

您可以看到返回的值不同,这是由括号引起的.您可以通过这个答案来详细了解.


关于java,括号没有任何区别.

编码惯例建议配合使用

return x + y;
Run Code Online (Sandbox Code Playgroud)

要了解更多,请阅读答案.


注意:我对java和C++知之甚少.关于java和C++的答案中的所有内容都来自其他答案.我这样做是为了巩固三种语言的不同约定.

  • "使其更具可读性" - 不确定,它也可能具有误导性,因为它看起来像一个函数调用. (4认同)
  • @FrankPuffer,不,不. (4认同)

dbu*_*ush 5

从技术上讲,没有理由将给定的表达式加上括号return。这真的是一个品味问题。

也就是说,return如果表达式使用布尔运算符,我通常会用括号括起来。由于此类运算符通常被视为 a whileor 的一部分if,因此除了在我看来跳跃之外,您还想用该值做一些事情变得更加清楚。

int out_of_range(int x)
{
    return ((x < 1) || (x > 10));
}
Run Code Online (Sandbox Code Playgroud)