Выражение соединения против экспрессии против субэкспрессии - PullRequest
3 голосов
/ 09 марта 2011

Мне кажется, что я немного запутался, отличая подвыражение от выражения.

Compound expression - Выражение, включающее более одного оператора.

например. 1 + 1 * 1

Expression - Оператор с одним или несколькими операндами.

Например, 1 + 1 или + 1

есть ли уровень ниже выражения, которое называется подвыражением?

Ответы [ 4 ]

9 голосов
/ 09 марта 2011

Выражение может не иметь оператора. Например, в следующем:

int a = 0;
a;

a является выражением. Выражение, чтобы процитировать стандарт C ++, это «последовательность операторов и операндов, которая определяет вычисление» (C ++ 03 5/1). Здесь a является «операндом», хотя оператора нет.


Подвыражение - это любое выражение, которое является частью большего выражения. Итак, в

int a = 0, b = 0, c = 0, d = 0;
a * b + c * d;

a * b и c * d являются подвыражениями.


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

Обычно сложные выражения просто называются «выражениями», а их части называются подвыражениями.

6 голосов
/ 09 марта 2011
  • Стандарт C ++ определяет, что Выражение в целой главе (Глава 5, если я правильно помню).

  • Стандарт C ++ не определяет, что такое составное выражение

  • Стандарт C ++ определяет full expression как выражение, которое не является подвыражением какого-либо другого выражения

Пример:

a + 4 + 5;

a + 4 + 5 - полное выражение. Ни a, ни 4, ни a + 4 в этом выражении не являются полными выражениями (хотя они являются (под) выражениями), поскольку это подвыражение вышеприведенного выражения

4 голосов
/ 09 марта 2011

Хотя вы уже получили несколько хороших ответов, я добавлю еще одну деталь, которая может быть неочевидна из этих ответов: подвыражение также может быть совершенно отдельным выражением, которое не является лексической частью полного выражения.оцененный.

Очевидный пример этого - когда вы вызываете функцию, которая использует аргумент по умолчанию.В этом случае присвоение аргументу значения по умолчанию считается подвыражением вызывающего выражения.Например, если что-то типа:

int f(int const &x=2) { return x; }
int y = f()+4;

, то f() создает временный int, который инициализируется значением 2 и затем передается по ссылке на f.Создание и инициализация этого временного объекта является подвыражением полного выражения y= f() + 4, хотя текст int const &x=2 является полностью отдельным.

0 голосов
/ 09 марта 2011

Насколько я понимаю из приведенных выше определений, 2+3, -4 и *ptr являются выражениями. Что может быть короче этого? Может быть, только идентификаторы и константы, такие как 4.

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