Форум » C/C++ для начинающих (C/C++ for beginners) » Новый синтаксис предложения if в стандарте C++ 17 » Ответить

Новый синтаксис предложения if в стандарте C++ 17

Сыроежка: В стандарте C++ 17 предложение if определяется следующим образом: [pre2] selection-statement: if constexpropt ( init-statementopt condition ) statement if constexpropt ( init-statementopt condition ) statement else statement [/pre2] Оставим пока в стороне спецификатор constexpr и обратим внимание на то, что в новой редакции предложения if помимо условия (condition), которое в свою очередь может быть объявлением, можно вставлять перед ним предложение объявления (init-statement). Это позволяет сузить область объявления переменных, которые должны использоваться только внутри if предложения. Следующий, несколько искусственный пример показывает, как теперь может выглядеть в отдельных случаях if предложение. [pre2] #include <iostream> #include <iterator> #include <cstring> char guess_character() { std::cout << "Enter a character: "; char c; if ( not ( std::cin >> c ) ) c = '*'; return c; } int main() { if ( const char c = guess_character(), *s = "Hello World!"; const char *p = std::strchr( s, c ) ) { std::cout << "\'" << c << "\' is found at positioon " << std::distance( s, p ) << ".\n"; } else { std::cout << "\'" << c << "\' is not found." << '\n'; } } [/pre2] Вывод программы на консоль может, к примеру, выглядеть следующим образом: [pre2] Enter a character: W 'W' is found at positioon 6.[/pre2] Или более итеративный вариант показанной программы. [pre2] #include <iostream> #include <iterator> #include <cstring> char guess_character() { std::cout << "Enter a character ('*' - exit): "; char c; if ( not ( std::cin >> c ) ) c = '*'; return c; } int main() { while ( true ) { if ( const char c = guess_character(), *s = "Hello World!"; const char *p = std::strchr( s, c ) ) { std::cout << "\'" << c << "\' is found at positioon " << std::distance( s, p ) << ".\n"; } else { if ( c == '*' ) break; else std::cout << "\'" << c << "\' is not found." << '\n'; } } } [/pre2] Вывод программы может выглядеть как [pre2] Enter a character ('*' - exit): W 'W' is found at positioon 6. Enter a character ('*' - exit): A 'A' is not found. Enter a character ('*' - exit): *[/pre2]

Ответов - 1

Сыроежка: Кстати сказать, выглядит странным, что в стандарте C++ 17 предложение while не имеет такой же формат, как и предложение if. Было бы последовательным, чтобы предложение while также имело формат, включающий init-statement. [pre2] iteration-statement: while ( init-statementopt condition ) statement [/pre2] Это позволяет вводить локальные переменные в область объявления while предложения. Например, [pre2] while ( std::string s; std::getline( std::cin, s ) and not std::empty( s ) ) { std::cout << s << '\n'; // ... }[/pre2]



полная версия страницы