Действительно ли возврат является оператором или функцией?

Это является слишком основным, я думаю, но как оба из них работают?

return true;   // 1

и

return (true); // 2

Подобный: sizeof, exit

Мое предположение:

Если возврат был функцией, 1 было бы ошибочно.

Так, возврат должен быть a unary operator это может также взять в скобках... в значительной степени как unary minus: -5 и -(5), оба хорошо.

Это то, что это - унарный оператор?

22
задан Lazer 6 May 2010 в 18:18
поделиться

7 ответов

return - это ключевое слово которое манипулирует потоком управления. В этом оно похоже на if, for и т.д. Он может использоваться с выражением или без него (return; возвращает из функции void). Конечно, как и во всех выражениях, допускается использование дополнительных круглых скобок. (Так return (42); аналогично int i = (4*10+2);, в обоих случаях скобки лишние, но допустимые).

sizeof - это ключевое слово которое является оператором, аналогично new, delete, +, ->, :: и т.д.

std::exit() - это идентификатор , обозначающий функцию стандартной библиотеки языка Си (которая никогда не возвращается к вызывающей стороне).

29
ответ дан 29 November 2019 в 03:25
поделиться

return - это просто конструкция языка / потока управления. Это определенно не функция, поскольку она синтаксически несократима, и на самом деле это не оператор, поскольку он не имеет возвращаемого значения.

27
ответ дан 29 November 2019 в 03:25
поделиться

«return» не является ни подпрограммой, ни оператором.

Это переводится как хорошо известная инструкция ассемблера. Например, на архитектуре x86 он переводится как «ret», а на PowerPC, архитектура переводится как «blr».

Для возвращаемого значения компилятор перемещает это значение в соответствующий регистр (-ы) до выдачи инструкции возврата. В архитектуре x86 это обычно EAX и EDX, если необходимо - регистры немного изменятся для x86-64. На КПП, если не изменяет память, это r1 - другие могут поправить меня, если я ошибаюсь в этой детали.

Надеюсь, это поможет.

4
ответ дан 29 November 2019 в 03:25
поделиться

return не является оператором и не является функцией. return - это ключевое слово, формирующее оператор return, который относится к категории jump statements. В этом отношении оно не имеет абсолютно никакого сходства ни с sizeof, ни с exit.

Требование помещать () вокруг аргумента return существовало в древних достандартных версиях C (CRM C, например), но было быстро устранено, хотя причудливая привычка оборачивать аргумент return в лишние () время от времени встречается и сегодня.

17
ответ дан 29 November 2019 в 03:25
поделиться

return - это ключевое слово потока управления, как и goto , break , continue , if , else ] ... Не думайте об этом как об операторе, потому что он не меняет стоящее за ним значение. () предназначены только для оценки выражений, и результат вычисленного выражения будет передан вызывающей функции (как это зависит от реализации компилятора).

Это также определенно не функция, просто подумайте: как бы вы вернулись из возврата?

7
ответ дан 29 November 2019 в 03:25
поделиться

"Требование помещать () вокруг аргумента возврата существовало в древних предстандартных версиях C (например, CRM C), но было быстро устранены, хотя причудливая привычка заключать аргумент возврата в лишний () время от времени проявляется даже сегодня ».

Да, вы знаете, что смотрите на какой-то старый код или кто-то думает, что return - это функция, когда вы видите, как они все время используют парные скобки. Мой преподаватель в колледже делал это, и это все время меня раздражало. Ну, по крайней мере, он был последовательным.

0
ответ дан 29 November 2019 в 03:25
поделиться
'true' is an Expression, 
'(true)' is an Expression. 

за return всегда может следовать выражение, но для проверки типа return, выражение должно иметь тот же тип, что и возвращаемый тип функции.

поэтому можно обобщить его, сказав

return Expression. 

(В функции с типом возврата void за return не может следовать выражение; голый return просто завершает функцию)

.
2
ответ дан 29 November 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: