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