Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2NowoczesnyC++
Jaktodziała
Słowokluczowe
constexpr
możnawykorzystaćdotworzeniazmiennychifunkcji,które
zpewnościąbędąmogłyzostaćobliczonewtrakciekompilacji.Kompilatorzgłosibłąd,
jeślidodamydotakichwyrażeńdowolnykod,któryuniemożliwiobliczeniewczasie
kompilacji.WistociestandardC++20rozszerzafunkcjonalność
constexpr
ozezwole-
nienastosowaniebloków
try/catch
wewnątrz
is_constant_evaluated
;jednakobsługa
tejfunkcjonalnościniejestspójnapomiędzyróżnymikompilatorami,aprzynajmniej
niedoczasupełnegozatwierdzeniastandardu.Listing2-15pokazujeprogramużywa-
jącyzmiennejwykorzystującej
constexpr
dozdefiniowaniarozmiarutablicy(
array
).
Listing2-15.Używanie
constexpr
dodefiniowaniawielkości
array
#include<array>
#include<cstdint>
#include<iostream>
intmain()
{
constexpruint32_tARRAY_SIZE{5};
std::array<uint32_t,ARRAY_SIZE>myArray{1,2,3,4,5};
for(auto&&number:myArray)
{
std::cout<<number<<std::endl;
}
return0;
}
Zmienna
constexpr
wlistingu2-15gwarantuje,żewartośćbędziemogłazostaćobli-
czonawczasiekompilacji.Jesttoniezbędnewtymprzypadku,gdyżrozmiartablicyjest
czymś,comusizostaćustalonepodczaskompilowaniaprogramu.Listing2-16pokazu-
je,jakmożemyrozszerzyćtenprzykład,abyzawierałfunkcjętypu
constexpr
.
Listing2-16.Funkcjatypu
constexpr
#include<array>
#include<cstdint>
#include<iostream>
41