C++:n tekninen raportti 1

C++ Technical Report 1 (TR1) on yleisnimi ISO/IEC TR 19768 -standardille, C++ Extension Libraries on asiakirja, joka ehdottaa lisäyksiä C++-kirjastostandardiin. Lisäosat sisältävät säännöllisiä lausekkeita , älykkäitä osoittimia , hash-taulukoita ja satunnaislukugeneraattoreita . TR1 ei ole standardi, vaan pikemminkin asiakirjaluonnos. Suurin osa hänen ehdotuksistaan ​​tuli kuitenkin osaksi seuraavaa virallista standardia C++11 .

Asiakirja jaettiin ensin luonnoksena Draft Technical Report on C++ Library Extensions , minkä jälkeen se julkaistiin ISO/IEC-standardina vuonna 2007 nimellä ISO/IEC TR 19768:2007 .

TR1:ssä kuvatut lisäykset

Kaikki TR1:n kuvaamat lisäykset ovat nimiavaruudessa std::tr1

Yleiset apuohjelmat

Toiminnalliset objektit

Määritetään otsikkotiedostossa tr1/functional

Metaohjelmointi ja tyyppiominaisuudet

Useita metamalleja on määritelty tr1/functional :ssa: is_pod, has_virtual_destructor, remove_extent ja muut. Perustuu Boost-tyypin ominaisuuksiin.

PRNG

tr1/random otsikkotiedosto määrittää:

Matemaattiset erikoisfunktiot

Jotkut TR1:n ominaisuudet, kuten erityiset matemaattiset funktiot ja jotkut C99 -lisäykset , jotka eivät sisälly TR1:n Visual C++ -toteutukseen.

Nämä lisäykset eivät päässeet C++11:een.

Seuraavassa taulukossa on lueteltu kaikki TR1:ssä kuvatut 23 erikoistoimintoa.

Toiminnon nimi Toiminnon prototyyppi matemaattinen lauseke
Yleistetyt Laguerren polynomit double assoc_laguerre (signed n, unsigned m, double x) ;
Liittyvät Legendre-polynomit double assoc_legendre (signed l, unsigned m, double x) ;
beta-toiminto kaksoisbeeta ( double x, double y) ;
Täydellinen normaali elliptinen 1. tyyppinen Legendre-integraali double comp_ellint_1 (double k) ;
Täydellinen normaali elliptinen Legendre-integraali 2. lajista double comp_ellint_2 (double k) ;
Täydellinen normaali elliptinen Legendre-integraali 3. lajista double comp_ellint_3 (double k, double nu) ;
Degeneroituneet hypergeometriset funktiot double conf_hyperg (double a, double c, double x) ;
Tavalliset sylinterimäiset Bessel-toiminnot double cyl_bessel_i (double nu, double x) ;
Ensimmäisen tyyppiset lieriömäiset Bessel-funktiot double cyl_bessel_j (double nu, double x) ;
fi:Epäsäännölliset modifioidut sylinterimäiset Besselin toiminnot double cyl_bessel_k (double nu, double x) ;
fi:Sylinterimäiset Neumann-funktiot

fi: Toisen tyyppiset sylinterimäiset Bessel-funktiot

double cyl_neumann (double nu, double x) ;
Epätäydellinen 1. tyypin normaali elliptinen integraali double ellint_1 (kaksois k, tupla phi) ;
Epätäydellinen 2. tyypin normaali elliptinen integraali double ellint_2 (double k, double phi) ;
Epätäydellinen 3. tyyppinen normaali elliptinen integraali double ellint_3 (double k, double nu, double phi) ;
Integraalinen eksponentiaalinen funktio double expint (double x) ;
Eremiittipolynomit kaksinkertainen erakko (signed n, double x) ;
fi:Hypergeometrinen sarja double hyperg (kaksois a, tuplab, tupla c, tupla x) ;
fi:Laguerren polynomit double laguerre (signed n, double x) ;
fi:Legendre-polynomit double legendre (signed l, double x) ;
Riemannin zeta-funktio double riemann_zeta (kaksois x) ;
fi:Ensimmäisen tyyppiset pallomaiset Bessel-funktiot double sph_bessel (signed n, double x) ;
fi:Spherical liittyvät Legendre-funktiot double sph_legendre (signed l, unsigned m, double theta) ;
fi:Pyöreät Neumann-funktiot

fi: Toisen tyyppiset pallomaiset Bessel-funktiot

double sph_neumann (signed n, double x) ;

Jokaisessa toiminnossa on kaksi lisävaihtoehtoa. F- tai L-liitteen lisääminen funktion nimeen antaa funktion, joka vaikuttaa vastaavasti kelluviin tai pitkiin kaksoisarvoihin. Esimerkiksi:

float sph_neumannf ( signed n , float x ) ; long double sph_neumannl ( signed n , long double x ) ;

Kontit

Tuplejen tyyppi on tuple, joka perustuu Boost Tupleen, samanlainen kuin std:pair-laajennus useammalle objektille.

Kiinteäpituisten taulukoiden tyyppi on array, joka perustuu Boost Array -järjestelmään.

Hash-säiliöt

Otsikkotiedostot unordered_set, unordered_map. Tyypit unordered_set, unordered_multiset, unordered_map, unordered_multimap (samanlainen kuin set, multiset, map, multimap). Ne tarjoavat keskimäärin jatkuvan pääsyajan, mutta pahimmassa tapauksessa toiminnan kesto on lineaarinen monimutkaisuus säiliön elementtien lukumäärän suhteen.

Säännölliset lausekkeet

regex-otsikkotiedosto, tarjoaa regex-, regex_match-, regex_search-, regex_replace- jne. Perustuu Boost RegExiin

C-yhteensopivuus

Yksi C++:n kehittämisen konsepteista oli tehdä siitä mahdollisimman yhteensopiva C-ohjelmointikielen kanssa. Tämä konsepti ei kuitenkaan ollut eikä ole prioriteetti, vaan vain erittäin suositeltava, ja siksi C ++:aa ei voida pitää C:n suppeassa merkityksessä superjoukkona (näiden kielten standardit vaihtelevat). TR1 on yritys sovittaa yhteen näiden kielten väliset erot lisäämällä eri otsikot seuraaviin C++-kirjastoihin: <complex>, <locale>, <cmath>jne. Nämä muutokset auttavat saattamaan C++:n linjaan C99 :n kanssa (kaikki C99:n osat eivät sisälly TR1:een).

Tekninen raportti 2

Suunnitelmissa oli julkaista seuraavat lisäykset, C++ Technical Report 2 , C++11 -standardoinnin jälkeen [1] . Myöhemmin standardointikomitea kuitenkin hylkäsi TR2 :n ja suosi kompakteja, aluekohtaisia ​​määrityksiä [2] .

Jotkut ehdotetuista laajennuksista:

Katso myös

Muistiinpanot

  1. TR2 ehdotuspyyntö . Haettu 17. huhtikuuta 2013. Arkistoitu alkuperäisestä 18. huhtikuuta 2013.
  2. TR2 on kuollut; sen sijaan tulee useita TR:itä .  (linkki ei saatavilla)

Kirjallisuus

Linkit