Форум » C/C++ » Новая форма if предложения в C++23 » Ответить

Новая форма if предложения в C++23

Сыроежка: В C++23 появилась новая форма if предложения. Она позволяет разделять выполнение кода на этапе компиляции или на этапе выполнения программы. Новое if предложение выглядет следующим образом: [pre2] if !opt consteval compound-statement if !opt consteval compound-statement else statement [/pre2] Если данное if предложение выполняется в контексте вычисления константного выражения, то управление получает первое составное предложение. В противном случае выполняется второе составное предложение, если оно присутствует, или следующее за if предложением предложение. Ниже приведена простая демонстрационная программа. [pre2] #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'; } [/pre2] Вывод программы на консоль: [pre2] b1 is true b2 is false [/pre2] В заговочном файле <type_traits> имеетя функция std::is_constant_evaluated, которая идентична вышепоказанной самописной функции. Таким образом вышеприведенная программа может быть переписана следующим образом: [pre2] #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'; } [/pre2] Вывод программы на консоль будет полностью идентичен выводу предыдущей программы. К сожалению, MS VS19 C++ компилятор еще не поддерживает данную форму if предложения даже, если в свойствах проекта выбрать пункт для C++ компилятора [quote]Предварительная версия — функции из последнего рабочего черновика C++ (/std:c++latest)[/quote] С другой стороны, на www.godbolt.org можно, например, выбрать одну из последних версий компилятора clang, установив опцию -std=c++23, и программы будут компилироваться.

Ответов - 0



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