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

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



ссылка на сообщение  Отправлено: 06.01.24 14:14. Заголовок: Новая форма if предложения в C++23


В C++23 появилась новая форма if предложения. Она позволяет разделять выполнение кода на этапе компиляции или на этапе выполнения программы.

Новое if предложение выглядет следующим образом:

 
if !opt consteval compound-statement
if !opt consteval compound-statement else statement


Если данное if предложение выполняется в контексте вычисления константного выражения, то управление получает первое составное предложение. В противном случае выполняется второе составное предложение, если оно присутствует, или следующее за if предложением предложение.

Ниже приведена простая демонстрационная программа.

 
#include <iostream>

constexpr bool test_consteval()
{
if consteval { return true; }
else { return false; }
}

int main()
{
const bool b1 = test_consteval();
bool b2 = test_consteval();

std::cout << std::boolalpha;
std::cout << "b1 is " << b1 << '\n';
std::cout << "b2 is " << b2 << '\n';
}

Вывод программы на консоль:
 
b1 is true
b2 is false


В заговочном файле <type_traits> имеетя функция std::is_constant_evaluated, которая идентична вышепоказанной самописной функции. Таким образом вышеприведенная программа может быть переписана следующим образом:

 
#include <iostream>
#include <type_traits>

int main()
{
const bool b1 = std::is_constant_evaluated();
bool b2 = std::is_constant_evaluated();

std::cout << std::boolalpha;
std::cout << "b1 is " << b1 << '\n';
std::cout << "b2 is " << b2 << '\n';
}

Вывод программы на консоль будет полностью идентичен выводу предыдущей программы.

К сожалению, MS VS19 C++ компилятор еще не поддерживает данную форму if предложения даже, если в свойствах проекта выбрать пункт для C++ компилятора

 цитата:
Предварительная версия — функции из последнего рабочего черновика C++ (/std:c++latest)


С другой стороны, на www.godbolt.org можно, например, выбрать одну из последних версий компилятора clang, установив опцию -std=c++23, и программы будут компилироваться.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


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

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