On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 08.11.18 18:02. Заголовок: Новый синтаксис предложения if в стандарте C++ 17


В стандарте C++ 17 предложение if определяется следующим образом:

 
selection-statement:
if constexpropt ( init-statementopt condition ) statement
if constexpropt ( init-statementopt condition ) statement else statement

Оставим пока в стороне спецификатор constexpr и обратим внимание на то, что в новой редакции предложения if помимо условия (condition), которое в свою очередь может быть объявлением, можно вставлять перед ним предложение объявления (init-statement).

Это позволяет сузить область объявления переменных, которые должны использоваться только внутри if предложения.

Следующий, несколько искусственный пример показывает, как теперь может выглядеть в отдельных случаях if предложение.
 
#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';
}
}

Вывод программы на консоль может, к примеру, выглядеть следующим образом:
 
Enter a character: W
'W' is found at positioon 6.

Или более итеративный вариант показанной программы.
 
#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';
}
}
}

Вывод программы может выглядеть как
 
Enter a character ('*' - exit): W
'W' is found at positioon 6.
Enter a character ('*' - exit): A
'A' is not found.
Enter a character ('*' - exit): *


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]





ссылка на сообщение  Отправлено: 13.11.18 11:06. Заголовок: Кстати сказать, выгл..


Кстати сказать, выглядит странным, что в стандарте C++ 17 предложение while не имеет такой же формат, как и предложение if.

Было бы последовательным, чтобы предложение while также имело формат, включающий init-statement.

 
iteration-statement:
while ( init-statementopt condition ) statement


Это позволяет вводить локальные переменные в область объявления while предложения. Например,
 
while ( std::string s; std::getline( std::cin, s ) and not std::empty( s ) )
{
std::cout << s << '\n';
// ...
}


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет