К какой категории относится инициализация оператора? - PullRequest
0 голосов
/ 29 октября 2011

Вопрос:

  1. В программировании оператор присваивания является выражением, но как насчет инициализации? Это выражение ??
  2. скобки цикла while должны содержать выражение, поэтому я пытаюсь вставить в него инициализацию, и компилятор выдает ошибку, это показывает, что инициализация не является выражением.

  3. Чтобы доказать это, я пробую цикл for и делаю это for(int num = 3 ; num2 = 4 ; num3 = 5). Удивительно, но компилятор снова выдает мне ошибки.

  4. Так что, если инициализация не является выражениемчто это за заявление ??

Спасибо, что потратили время на чтение моего вопроса

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

В C и C ++ присваивание является выражением. Например. a = 5 является выражением присваивания .

Как в C, так и в C ++ вы можете использовать любое выражение, за которым следует точка с запятой, где требуется оператор - например, тело функции. Этот тип оператора является выражением-оператором . (Технически, вы можете полностью исключить выражение. ; - вырожденное выражение-выражение .)

Вы можете использовать декларацию только там, где она ожидается, а не везде, где вы можете использовать выражение.

Следующее не является выражением или выражением-выражением , это объявление . (Технически, в C ++ он может сформировать объявление-оператор при использовании там, где ожидается оператор, в С это просто объявление .) Обратите внимание, что нет выражение-присваивание подраздел этой декларации, = 3 является инициализатором для объявленной сущности num.

int num = 3;

Эти два общих использования = (инициализация и назначение) иногда путают. Если = используется для инициализации объекта, объявленного в объявлении, это инициализация, где он используется для изменения значения уже объявленного объекта, это присваивание.

Вот где C и C ++ различаются: в C заключенная в скобки сущность, следующая сразу за ключевым словом while, должна быть выражением , поэтому что-то вроде while (int num = 0) { /* ... */ } недопустимо.

В C ++ сущностью может быть условие , которое допускает простое объявление с инициализатором, а также простое выражение , как в C. В C ++, где условие находится в форме объявления, объявленная сущность инициализируется на каждой итерации и неявно преобразуется в bool, чтобы определить, выполнять ли тело цикла.

Цикл for является специальным для обоих языков. На обоих языках первая часть списка в скобках после ключевого слова for может быть либо объявление , либо выражение-выражение .

0 голосов
/ 29 октября 2011

Цикл for принимает три выражения на C и C ++.Первый выполняется до запуска цикла.Значение секунды используется для определения окончания цикла.Третье выражение выполняется в конце каждой итерации цикла for.

Вы можете злоупотребить намерением цикла for и поместить любое выражение в эти трисекции.

Цикл while while(<expression>) {<body>} эквивалентен циклу for for(;<expression>;) {<body>}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...