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

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

return (value); 

我认为这些括号没有任何好处。 所以我的问题是,如果程序员假设return某种函数并将返回值作为参数,或者是否真的存在这些括号有意义的情况?

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

关于C.

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

 return x + y; 

程序员确实让它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)) 

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


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

编码惯例建议配合使用

 return x + y; 

要了解更多,请阅读此答案。


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

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

也就是说,如果使用布尔运算符,我通常会将return表达式括起来。 由于这些操作符通常被认为是一段while一部分或者if ,因此除了跳过我的观点之外,它更清楚地表明你想要用这个值做一些事情。

 int out_of_range(int x) { return ((x < 1) || (x > 10)); } 

主要是遗产。 K&R C Programming Language(1978)显示了使用括号的回报。 一些旧的C编译器可能需要这个,但我不确定。