Каково использование строки Constexpr в C++?
Использование constexpr может привести к созданию более компактных и оптимизированных исполняемых файлов. Поскольку значения заранее определяются компилятором, полученные двоичные файлы могут быть меньше по размеру, обеспечивая более экономное использование системных ресурсов, что, в свою очередь, может повысить производительность программного обеспечения на различных платформах. Одним из особых преимуществ этой функции является сокращение объема вычислений во время выполнения. Поскольку значения вычисляются в процессе компиляции, когда это возможно, оценка во время выполнения становится менее необходимой. Такое повышение эффективности не только ускоряет выполнение, но и оптимизирует общие операции программы.
Пример 1. Использование Constexpr в C++ для расчета факториала
В этом примере мы будем использовать constexpr, который позволяет выполнять вычисления во время компиляции, а не во время выполнения. В контексте вычисления факториалов для вычисления значений факториала во время компиляции можно использовать обычную математическую операцию constexpr. Давайте изучим и рассмотрим следующий код, а затем посмотрим на объяснение кода:
#include
constexpr интервал факториал ( интервал н ) {
возвращаться н <= 1 ? 1 : ( н * факториал ( н - 1 ) ) ;
}
интервал основной ( ) {
интервал на одной '=' 5 ;
стандартный :: расчет << «Факториал» << на одной << '=' << факториал ( на одной ) << стандартный :: конец ;
}
Данный пример кода демонстрирует использование constexpr для вычисления факториала числа рекурсивным способом. В этом примере компилятор может вычислить выражение факториала во время компиляции, поскольку функция факториала объявлена и определена с помощью спецификатора constexpr. Используя constexpr в программе C++, компилятор вычисляет выражение факториала 5 во время компиляции, устраняя необходимость вычислений во время выполнения.
Теперь давайте посмотрим подробную разбивку кода с конкретными деталями и пояснениями.
Во-первых, мы используем #include
После этого мы переходим к функции Factorial() (рекурсивной), которая имеет вид «constexpr int Factorial(int n)». Эта функция factial() определяет рекурсивную функцию, которая вычисляет факториал целого числа «n». Constexpr подразумевает, что оптимизация производительности может быть результатом вычисления функции во время компиляции.
Возврат n <= 1 ? 1 : (n * Factorial(n – 1)) В строке используется условное выражение для рекурсии, которое гласит, что если «n» меньше или равно 1, оно возвращает 1 (базовый случай). В противном случае он выполняет вычисление факториала (n! = n * (n-1)!), которое является общей формулой для вычисления факториала, неоднократно вызывая себя с помощью «n – 1», а затем умножая результат на «n». ». Эти строки действуют как привратник при расчете факториала. Он проверяет, находится ли число на базовом уровне, и в случае положительного результата возвращает 1. В противном случае запускается цепная реакция вызовов функций, каждый из которых работает с меньшими числами, пока не будет достигнут базовый случай. Затем результаты перемножаются в обратном порядке. Ниже приведен вывод кода для справки:
Пример 2. Подсчет строчных букв, демонстрирующий строку Constexpr C++
Здесь мы научимся подсчитывать количество строчных букв с помощью строки countexpr. В этом примере цель состоит в том, чтобы подсчитать количество строчных букв в заданной строке с помощью функции constexpr, чтобы сократить объем вычислений во время выполнения. Функция countLowercase(), объявленная как constexpr, принимает строку «string_view» в качестве параметра и перебирает каждый символ данной строки в качестве входных данных. Для каждой встреченной строчной буквы счетчик увеличивается. Затем результат получается во время компиляции, поскольку функция работает с постоянными выражениями, демонстрируя эффективность и преимущества в производительности оценки во время компиляции. Сначала проверьте следующий код. Затем переходите к подробному объяснению:
#include#include
использование пространства имен std ;
constexpr size_t счет в нижнем регистре ( string_view с ) {
size_t считать '=' 0 ;
для ( голец с : с ) {
если ( ниже ( с ) ) {
считать ++;
}
}
возвращаться считать ;
}
интервал основной ( ) {
расчет << 'Всего строчных букв в ' Строчные буквы 'есть = '
<< счет в нижнем регистре ( 'Строчные буквы' ) << конец ;
}
Вот подробная разбивка кода с объяснением каждой строки:
#include
В функции countLowercase() функция constexpr size_t countlower(string_view s) подсчитывает строчные буквы в заданном представлении строки. int main() — это точка входа в программу, которая печатает сообщение, указывающее количество строчных букв в «LoWeR CaSe LeTtErS», и вызывает функцию countLowercase() с «LoWeR CaSe LeTtErS» в качестве входных данных и печатает результат. Обратитесь к следующему выводу программы:
Пример 3. Демонстрация массива с использованием C++ Constexpr
Демонстрация массива показывает, как массивы, представляющие собой структурированные коллекции элементов одного и того же типа данных, создаются, доступны и управляются на языке программирования. Далее мы объясним это на примере кода, в котором программа предоставляет простой пример инициализации и манипулирования массивом во время компиляции.
Демонстрация массива иллюстрирует концепцию массивов — структурированного набора элементов, имеющих один и тот же тип данных, — и то, как их можно создавать, получать к ним доступ и манипулировать ими с помощью языка программирования. В следующем примере кода мы продемонстрируем, как инициализировать массив во время компиляции, вычислить его размер и распечатать элементы данного массива. Посмотрите следующий код и перейдите к объяснению:
#includeиспользование пространства имен std ;
интервал основной ( ) {
constexpr интервал массивint [ 9 ] '=' { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr интервал размер_массива '=' размер массивint / размер ( интервал ) ;
расчет << 'Длина массива равна = ' << размер_массива << конец ;
расчет << 'Элементы массива = ' ;
для ( интервал я '=' 0 ; я < размер_массива ; ++ я ) {
расчет << массивint [ я ] << '' ;
}
}
Эта программа инициализирует массив constexpr, вычисляет его длину во время компиляции, а затем выводит длину массива и элементы на консоль. Constexpr гарантирует, что массив и его свойства определяются во время компиляции. Давайте разберем код и объясним конкретные детали одну за другой:
Чтобы включить стандартную библиотеку потоков ввода-вывода, позволяющую использовать для вывода такие функции, как «cout», вызывается #include
Цикл for перебирает элементы массива arrayint[]», а затем значения выводятся на консоль. Давайте посмотрим следующий вывод данного кода:
Заключение
Появление и развитие ключевого слова constexpr в C++ произвели революцию в способах обработки константных выражений и значений. В этой статье были рассмотрены три практических примера, демонстрирующие возможности constexpr при вычислении факториалов, подсчете строчных букв и инициализации массивов во время компиляции. Ключевые выводы включают повышение производительности, сокращение времени вычислений и повышение эффективности использования памяти. Constexpr — ценный инструмент для создания надежных, постоянных объектов в базе кода, обеспечивающий неизменяемость и способствующий созданию более рациональных и эффективных программ.