Это является слишком основным, я думаю, но как оба из них работают?
return true; // 1
и
return (true); // 2
Подобный: sizeof
, exit
Мое предположение:
Если возврат был функцией,
1
было бы ошибочно.Так, возврат должен быть a
unary operator
это может также взять в скобках... в значительной степени какunary minus
:-5
и-(5)
, оба хорошо.
Это то, что это - унарный оператор?
return
- это ключевое слово которое манипулирует потоком управления. В этом оно похоже на if
, for
и т.д. Он может использоваться с выражением или без него (return;
возвращает из функции void
). Конечно, как и во всех выражениях, допускается использование дополнительных круглых скобок. (Так return (42);
аналогично int i = (4*10+2);
, в обоих случаях скобки лишние, но допустимые).
sizeof
- это ключевое слово которое является оператором, аналогично new
, delete
, +
, ->
, ::
и т.д.
std::exit()
- это идентификатор , обозначающий функцию стандартной библиотеки языка Си (которая никогда не возвращается к вызывающей стороне).
return
- это просто конструкция языка / потока управления. Это определенно не функция, поскольку она синтаксически несократима, и на самом деле это не оператор, поскольку он не имеет возвращаемого значения.
«return» не является ни подпрограммой, ни оператором.
Это переводится как хорошо известная инструкция ассемблера. Например, на архитектуре x86 он переводится как «ret», а на PowerPC, архитектура переводится как «blr».
Для возвращаемого значения компилятор перемещает это значение в соответствующий регистр (-ы) до выдачи инструкции возврата. В архитектуре x86 это обычно EAX и EDX, если необходимо - регистры немного изменятся для x86-64. На КПП, если не изменяет память, это r1 - другие могут поправить меня, если я ошибаюсь в этой детали.
Надеюсь, это поможет.
return
не является оператором и не является функцией. return
- это ключевое слово, формирующее оператор return, который относится к категории jump statements. В этом отношении оно не имеет абсолютно никакого сходства ни с sizeof
, ни с exit
.
Требование помещать ()
вокруг аргумента return
существовало в древних достандартных версиях C (CRM C, например), но было быстро устранено, хотя причудливая привычка оборачивать аргумент return
в лишние ()
время от времени встречается и сегодня.
return - это ключевое слово потока управления, как и goto
, break
, continue
, if
, else
] ... Не думайте об этом как об операторе, потому что он не меняет стоящее за ним значение. ()
предназначены только для оценки выражений, и результат вычисленного выражения будет передан вызывающей функции (как это зависит от реализации компилятора).
Это также определенно не функция, просто подумайте: как бы вы вернулись из возврата?
"Требование помещать () вокруг аргумента возврата существовало в древних предстандартных версиях C (например, CRM C), но было быстро устранены, хотя причудливая привычка заключать аргумент возврата в лишний () время от времени проявляется даже сегодня ».
Да, вы знаете, что смотрите на какой-то старый код или кто-то думает, что return - это функция, когда вы видите, как они все время используют парные скобки. Мой преподаватель в колледже делал это, и это все время меня раздражало. Ну, по крайней мере, он был последовательным.
'true' is an Expression,
'(true)' is an Expression.
за return всегда может следовать выражение, но для проверки типа return, выражение должно иметь тот же тип, что и возвращаемый тип функции.
поэтому можно обобщить его, сказав
return Expression.
(В функции с типом возврата void
за return
не может следовать выражение; голый return
просто завершает функцию)