Есть ли разница между этими двумя операторами внутри функции?
bool returnValue = true;
// Code that does something
return(returnValue);
и это?
bool returnValue = true;
// Code
return returnValue;
Первое заключено в круглые скобки returnValue
.
c++
/c
. Было бы хорошо уточнить определение языка, но я не знаю, как это исправить 9 лет спустя.C
есть дубликат stackoverflow.com/questions/161879/…Ответы:
Начиная с C ++ 14, они часто бывают такими.
C ++ 14 добавляет дополнительный случай, когда круглые скобки вокруг возвращаемого значения могут изменить семантику. Этот фрагмент кода показывает две объявленные функции. Единственное отличие - круглые скобки вокруг возвращаемого значения.
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))
В первом случае
func1
возвращается значение,int
а во второмfunc1
- значениеint&
. Разница в семантике напрямую связана с окружающими круглыми скобками .Спецификатор
auto
в его последней форме был введен в C ++ 11. В спецификации языка C ++ это описывается как:Также в C ++ 11 появился
decltype
спецификатор, описанный в спецификации языка C ++ :В C ++ 14 возможность использования
decltype(auto)
была разрешена для типов, возвращаемых функцией. В исходных примерах проявляется семантическая разница в круглых скобках. Возвращаясь к исходным примерам: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))
decltype(auto)
позволяет выводить конечный тип возвращаемого значения в функции из сущности / выражения в операторе возврата. В первой версииreturn var1;
это фактически то же самое, что и возврат типаdecltype(var1)
(int
возвращаемый тип по правилу 1 выше), а во втором случаеreturn (var1);
фактически то же самое, что иdecltype((var1))
(int &
возвращаемый тип по правилу 2b).Скобки делают возвращаемый тип
int&
вместоint
, таким образом изменяя семантику. Мораль истории - «Не все круглые скобки в возвращаемом типе одинаковы».источник
return (x);
эквивалентным случаюreturn &x;
и не должно быть возможным, чтобы это привело к возврату значение x, но со ссылкой на тип x.auto
довольно часто. Наша семантика никогда не меняется, пока мы держимся в сторонеdecltype
? Я боюсь неожиданного поведения, когда мы перейдем к следующей версии компилятора, включающей следующую Visual Studio.Нет никакой разницы.
Одной из причин использовать круглые скобки было бы, если бы вы хотели оценить выражение перед возвратом, но в вашем примере не было бы причин. Видеть:
Круглые скобки вокруг возвращаемых значений
для дальнейшего обсуждения.
источник
return m * x + c
иreturn (m * x + c)
илиreturn ( (m * x) + c )
или и т. Д. - и, если вы спросите меня, это тоже не выглядит лучше или интуитивнее.Скобки в верхнем примере излишни; они фактически игнорируются.
Это было бы то же самое, что-то вроде ...
int x = (5);
Круглые скобки здесь также игнорируются.
источник
AFAIK, нет ничего другого.
В C ++ выражения могут иметь форму:
expr
или(expr)
. Итак, последнее - это выражение с большим количеством типов. Чтобы узнать больше об этом, обратитесь к грамматике (ищите «выражение»).источник
Нет, в вашем коде нет никакой разницы.
источник
Я предполагаю,
boo
что это опечатка, и вы спрашиваете, есть ли разница междуreturn expr;
и
return(expr);
Ответ - нет.
источник
Нет разницы!!
Люди используют круглые скобки, если речь идет о сложном выражении.
Кстати
return
, это утверждение, а не функция.источник
Нет, между ними нет никакой разницы, хотя вы можете включить круглые скобки, если это упрощает чтение и понимание выражения.
источник
return
это жадный оператор, которыйreturn m * x + c
может вернутьm
и отбросить остальные, или что?Вы чрезмерно замедляете работу компилятора!
Наличие круглых скобок не только замедляет фазу предварительной обработки, но и генерирует более сложное абстрактное синтаксическое дерево: больше памяти, больше вычислений.
С семантической точки зрения? Они абсолютно идентичны. Независимо от того, есть ли круглые скобки,
return
оператор полностью оценит выражение перед его возвратом.источник
Они одинаковые. Я довольно часто вижу синтаксис скобок и всегда спрашиваю тех, кто его использует: почему ? И никто не может ответить, зачем они его используют.
Короче говоря, круглые скобки вокруг возвращаемых выражений используются людьми, которые не совсем понимают разницу между функционально-подобными макросами и функциями или которые не понимают приоритета операторов или порядка правил оценки в C. Нет кодирования стиль выигрывает от использования скобок.
Таким образом
return value;
правильнее чем
return (value)
потому что последнее предполагает, что вы не совсем понимаете, что делаете :)
источник
Оба варианта одинаковы в вашем случае.
источник
a
есть5
тоreturn a++;
иreturn (a++);
(что одно и то же) оба вернутся5