«полное выражение» против «полного выражения»

Я смотрел эта почта в GitHub, но не мог понять, что имел в виду OP:

"full expression" suggest that it is a kind of expression, but sometimes it is not.

Моя интерпретация заключается в том, что «полное выражение» (термин, используемый в Стандарте) не может быть выражением. [intro.execution]/5 дает определение полного выражения следующим образом:

A full-expression is
(5.1) — an unevaluated operand (8.2),
(5.2) — a constant-expression (8.6),
(5.3) — an init-declarator (Clause 11) or a mem-initializer (15.6.2), including the constituent expressions of the initializer,
(5.4) — an invocation of a destructor generated at the end of the lifetime of an object other than a temporary object (15.2), or
(5.5) — an expression that is not a subexpression of another expression and that is not otherwise part of a full-expression.

Если моя интерпретация верна, я хотел бы знать, какой из приведенных выше пунктов дает полное выражение, которое не является выражением. В противном случае, то есть, если я ошибаюсь, что имел в виду ОП своим комментарием?

Поскольку ветка была о том, следует ли переносить «полное выражение» через дефис, ОП также мог иметь в виду, что удаление дефиса сделает более двусмысленным определение того, что это на самом деле выражение.

Das_Geek 20.05.2019 15:14

Я думаю, что дискуссия, на которую вы ссылаетесь, касается различия между «полным выражением», не являющимся стандартным языком, в то время как «полное выражение» является

463035818_is_not_a_number 20.05.2019 15:15

имхо, было бы лучше, если бы вы переформулировали вопрос, чтобы не ссылаться на сообщения на github. Только ОП может знать, что они на самом деле имели в виду с этим комментарием

463035818_is_not_a_number 20.05.2019 15:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Формальный список выражений можно найти в [грамм.выражение]. Это довольно большой текст, поэтому я не буду включать его сюда, но, используя его, мы можем видеть, что init-декларатор и mem-инициализатор не являются выражениями в соответствии с грамматикой. Это означает, что хотя init-декларатор и mem-инициализатор считаются полными выражениями, грамматически они не являются выражениями.

Великолепно! Но я все еще сомневаюсь в следующем: почему спецификация должна включать декларатор (используется в определении init-декларатор) и идентификатор инициализатора памяти (используется в определении mem-инициализатор) в определении полное выражение?? ?

João Afonso 20.05.2019 15:58

@JoãoAfonso Потому что это полные выражения. Вот почему вы можете делать такие вещи, как int i = 3, a = i++, b = i++; или foo(int i) : a(i++), b(i++) {}, и иметь определенное поведение. Каждый декларатор является полным выражением, поэтому нет конфликта при оценке i++. То же самое происходит в инициализаторах членов.

NathanOliver 20.05.2019 16:01

Другие вопросы по теме