Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2NowoczesnyC++
}
};
intmain()
{
constexpruint32_tARRAY_SIZE{MyClass{5}.GetValue()};
std::array<uint32_t,ARRAY_SIZE>myArray{1,2,3,4,5};
for(auto&&number:myArray)
{
std::cout<<number<<std::endl;
}
return0;
}
Kodzlistingu2-17jestwstanieutworzyćobiektiwywołaćmetodęwwyrażeniu
con-
stexpr
.Jesttomożliwe,gdyżkonstruktor
MyClass
zostałzadeklarowanyjakokonstruk-
tor
constexpr
.Kodwykorzystującysłowokluczowe
constexpr
pokazanydotegomiejsca
jestwpełnikompatybilnyzkompilatoramiC++11.StandardC++17złagodziłwiele
ograniczeń,któreistniaływwersjiC++11,astandardC++20dodajenowefunkcjonal-
ności.Instrukcje
constexpr
zgodnezC++11niemogąrobićwielurzeczy,któremógłby
wykonywaćnormalnykodC++.Przykładytakichograniczeńtotworzeniezmiennych
iużywaniewyrażeńwarunkowych(
if
).Kodwlistingu2-18pokazujefunkcję
constexpr
standarduC++14,którejmożnaużyćdoograniczeniamaksymalnegorozmiarutablicy.
Listing2-18.Używaniefunkcjitypu
constexpr
wC++14
#include<array>
#include<cstdint>
#include<iostream>
constexpruint32_tArraySizeFunction(uint32_tparameter)
{
uint32_tvalue{parameter};
if(value>10)
{
value
=
10;
}
43