2016-02-22 3 views
8

Довольно часто я вижу код, как это (C, C++, а иногда и Java):Скобки вокруг возвращаемых значений - почему?

return (value); 

Я не вижу никакой пользы от этих скобок. Итак, мой вопрос: есть ли у программистов return какая-то функция с возвращаемым значением в качестве аргумента или действительно ли существуют случаи, когда эти круглые скобки имеют смысл?

Я понимаю, что аналогичный вопрос уже задан here, но это связано только с ANSI C. Интересно, есть ли аспекты, специфичные для C++ или Java, на которые там не было ответа.

+1

'return' - инструкция, а _parentheses_ (« скобки »используются для' [] ') бесполезны. Грамматически они являются частью выражения, а не утверждения. Современные стили кодирования часто препятствуют их использованию. – Olaf

+0

@WillBriggs: Ну, это грамматически. Это может быть очень полезно для анализа кода. – Olaf

+0

Будут ли скобки, подобные этим, подавлять предупреждения о преобразовании из типа значения в возвращаемый тип функции? Я знаю, что некоторые другие предупреждения, такие как присвоения в условных операторах, могут быть подавлены с дополнительными parens. – Sqeaky

ответ

17

Что касается 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 круглые скобки не имеют никакого значения.

Coding конвенция предлагает пойти с

return x + y; 

понять больше, читайте this ответ.


Примечание: Я много о Java и C++ не знаю. Все содержание в моем ответе о java и C++ взято из других ответов. Я сделал это, чтобы объединить различные соглашения для трех языков.

+0

Реферат: «Итак, скобки это вопрос мнения и практики ». Большой!! –

+4

«чтобы сделать его более читаемым» - не уверен, он также может вводить в заблуждение, потому что он выглядит как вызов функции. –

+4

@FrankPuffer, нет. – SergeyA

4

Технически, нет никаких оснований заключать в скобки выражение, данное return. На самом деле это вопрос вкуса.

Это, как правило, заключает в скобки выражение return, если оно использует булевы операторы. Поскольку такие операторы обычно рассматриваются как часть while или if, это делает более понятным, что вы хотите что-то сделать с этим значением, помимо того, что, по-моему, прыгаете.

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

В основном наследие. K & Язык программирования R C (1978) показывает результаты с использованием скобок.Возможно, некоторые старые компиляторы C потребовали этого, но я не уверен.

Смежные вопросы