Может кто-нибудь объяснить мне инициализации в операторах 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 : удален неверный оператор.