Условное выражение Init-Statment C ++ - PullRequest
0 голосов
/ 15 апреля 2020

Может кто-нибудь объяснить мне инициализации в операторах if?

Этот вопрос здесь почти такой же, как мой C ++ 17 if, оператор с инициализатором, но без условия , но я не Я не чувствую, что ответы были адекватными.

Почему это работает?

if( int x = 4 ){ 
  std::cout << x;
}

У меня сложилось впечатление, что инициализация не возвращает значение. Действительно, приведенный ниже код является ошибкой:

std::cout << ( int y = 7 );

Цитируя из стандарта N4380, синтаксис должен выглядеть так:

"if constexpr_opt (условие init-Statement_opt) оператор"

И далее цитируем:

"Оператор if формы, если оператор constexpr_opt (условие условия инициализации) эквивалентен

{оператор инициации, если выражение constexpr_opt (условие)}"

А также:

"[Примечание. Оператор init заканчивается точкой с запятой. - Конечная заметка]"

Я могу представить, что "int x = 4" - это Init-заявление. Но

  • тогда оператор условия в приведенном мной примере отсутствует, а оператор условия не помечен как необязательный
  • и оператор init не заканчивается точкой с запятой .

EDITED : удален неверный оператор.

1 Ответ

1 голос
/ 15 апреля 2020

Это не новый синтаксис C ++ 17. Он всегда был там.

int x = 4 в вашем первом примере это не оператор init , но условие в грамматике Правило, которое вы цитировали.

условие может быть выражением или объявлением с инициализатором (и некоторыми другими ограничениями). Если он имеет последнюю форму, то объявление вводит объявленную переменную в ветви if, и выбирается первая ветвь, если объявленная переменная, контекстно преобразованная в bool, выдает true после ее инициализации.

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