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

时间:2016-02-22 17:49:56

标签: java c++ c

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

return (value);

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

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

4 个答案:

答案 0 :(得分:18)

关于C

将括号放在有表达式的位置,并且希望返回值为表达式的值。 即使这样也不需要括号。写一些像

这样的东西是完全可以的
return x + y;

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

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

<小时/> 关于C ++

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

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))

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

<小时/> 关于java,括号没有任何区别。

编码惯例建议与

一起使用
return x + y;

要了解更多信息,请阅读this回答。

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

答案 1 :(得分:4)

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

也就是说,如果使用布尔运算符,我通常会将return表达式括起来。由于此类运算符通常被视为whileif的一部分,因此除了跳出我的意见外,它更清楚地表明您希望使用该值执行某些操作。

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

首先这不是强制性的,您将看到它在返回表达式而非值中的重要性。但是,如果您不使用括号,则您的代码可能不那么容易阅读(特别是在复杂表达式的情况下),并且可能造成混乱。另外,可能会注意到它不是功能(因为括号不是强制性的)。您可能会注意到return 0;在main()主体末尾的情况。 值得注意的是,没有括号与0一起使用,这证明它不是函数。 因此,使用括号可以使代码对于编译器更具可读性和可理解性。