我经常看到像这样的代码(C、C++,有时候是Java):
return (value);
我并没有看到这些括号的任何好处。所以我的问题是,程序员是否假设return
是一种带有返回值作为参数的函数,还是真的存在这些括号有意义的情况?
我知道类似的问题已经在这里被问过了,但那只涉及ANSI C。我想知道是否存在C++或Java特定的方面还未在那里得到回答。
关于C
当有一个表达式且想要返回该表达式的值时,需要将括号放置在表达式周围。 即使如此,也不一定需要使用括号。 完全可以像下面这样书写:
return x + y;
程序员有时会这样编写return (x + y);
以使代码更易读。
因此,加括号是一种观点和实践问题。
有一个古怪的情况需要注意加括号。引用自这个问题。
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))
你可以看到返回的值不同,这是由于括号造成的。您可以查看此答案以了解详细信息。
编码约定建议使用
return x + y;
要了解更多,请阅读此答案。
从技术上讲,给 return
提供的表达式不需要加括号。这只是个人口味问题。
然而,如果return
表达式使用布尔运算符,我通常会加括号。因为这样的运算符通常会被视为 while
或 if
的一部分,这样更清楚地表明你想要做一些与该值有关的事情,而不仅仅是跳转,这是我的看法。
int out_of_range(int x)
{
return ((x < 1) || (x > 10));
}
主要是遗留问题。《K&R C程序设计语言》(1978年)使用括号显示返回值。可能有一些旧的C编译器需要这样做,但我不确定。
首先,这不是强制性的,而且您将在返回表达式而不是值时看到它的重要性。但是如果您不使用括号,那么您的代码可能不太容易阅读(特别是在复杂表达式的情况下),并可能会引起混淆。另外,请注意它不是一个函数(因为括号不是强制性的)。可以注意到 return 0;
在 main() 主体末尾处的情况。
在这里可以注意到,与 0 不使用括号,这证明了它不是函数。因此,括号用于使编译器更易读懂和理解代码。
return
是一个语句,而 _括号_(“方括号”用于[]
)是无用的。从语法上讲,它们是表达式的一部分,而不是语句的一部分。现代编码风格通常不鼓励使用它们。 - too honest for this sitereturn
语句中的括号可以改变其含义:https://dev59.com/Tm445IYBdhLWcg3wpL1_。 - Christian Hackl