Область действия блока C и локальная область

#c

#c

Вопрос:

Рассмотрим некоторые части этого руководства здесь: https://www.learncpp.com /, существуют ли какие-либо существенные различия между «Областью действия блока» и «Локальной областью действия»? Или они просто синонимы?

Из того, что я понимаю:

Область действия блока — область действия начинается с открывающей фигурной скобки { , заканчивается закрывающей фигурной скобкой } .

Локальная область действия — область действия начинается с инициализации параметров функции, заканчивается фигурной скобкой, закрывающей функции } .

Комментарии:

1. Насколько я понимаю, они во многом одинаковы, поскольку тело функции также можно интерпретировать как «блок». Пока вы понимаете, что все переменные, объявленные в иерархически более высоких блоках, действительны и в более низких блоках, все должно быть в порядке.

Ответ №1:

Люди говорят, что переменная находится в области блока, когда хотят подчеркнуть, что на самом деле это объект, который не существует вне блока, в котором они объявлены, и может повторно использовать имя для чего-то другого, например counter в for-loop . Однако, исходя из определения, они являются синонимами. При модульном тестировании я обычно помещаю отдельные тестовые входные данные в разные области блока, поэтому мне не приходится иметь дело с конфликтами имен.

Комментарии:

1. Будьте осторожны с терминологией здесь: «временный объект» создается «на лету» в выражении (обычно путем вызова функции, которая возвращает объект) и существует только до конца выражения , в котором он создан. В std::cout << f() << 'n'; , где f() возвращает, скажем, an int , вызов функции создает временный объект, который исчезает при ; .

2. конечно, отредактировано для уточнения.