C++ teknisk rapport 1

C++ Technical Report 1 (TR1) är det generiska namnet för ISO/IEC TR 19768-standarden, C++ Extension Libraries är ett dokument som föreslår tillägg till C++-biblioteksstandarden. Tillägg inkluderar reguljära uttryck , smarta pekare , hashtabeller och slumptalsgeneratorer . TR1 är inte en standard, utan snarare ett utkast till dokument. Men de flesta av hans förslag blev en del av nästa officiella standard, C++11 .

Dokumentet distribuerades först som ett utkast till Draft Technical Report on C++ Library Extensions och publicerades sedan som en ISO/IEC-standard 2007 under titeln ISO/IEC TR 19768:2007 .

Tillägg som beskrivs i TR1

Alla tillägg som TR1 beskriver finns i namnutrymmet std::tr1

Allmänna verktyg

Funktionella objekt

Definierat i rubrikfil tr1/functional

Metaprogrammering och typegenskaper

Flera metamallar är definierade i tr1/functional : is_pod, has_virtual_destructor, remove_extent och andra. Baserat på boosttypegenskaper.

PRNG

Tr1/random header-filen definierar:

Särskilda matematiska funktioner

Vissa funktioner i TR1, som speciella matematiska funktioner och vissa C99- tillägg , som inte ingår i Visual C++-implementeringen av TR1.

Dessa tillägg kom inte in i C++11.

Följande tabell listar alla 23 specialfunktioner som beskrivs i TR1.

Funktionsnamn Funktionsprototyp matematiska uttryck
Generaliserade Laguerre polynom dubbel assoc_laguerre (osignerad n, osignerad m, dubbel x) ;
Associerade Legendre polynom dubbel assoc_legendre (osignerad l, osignerad m, dubbel x) ;
betafunktion dubbel beta (dubbel x, dubbel y);
Komplett normal elliptisk Legendre-integral av första slaget dubbel komp_ellint_1 (dubbel k) ;
Komplett normal elliptisk Legendre-integral av 2:a slaget dubbel komp_ellint_2 (dubbel k) ;
Komplett normal elliptisk Legendre-integral av 3:e sorten dubbel komp_ellint_3 (dubbel k, dubbel nu);
Degenererade hypergeometriska funktioner dubbel conf_hyperg (dubbel a, dubbel c, dubbel x) ;
Vanliga cylindriska besselfunktioner dubbel cyl_bessel_i (dubbel nu, dubbel x) ;
Cylindriska Bessel-funktioner av det första slaget dubbel cyl_bessel_j (dubbel nu, dubbel x) ;
sv: Oregelbundna modifierade cylindriska Bessel-funktioner dubbel cyl_bessel_k (dubbel nu, dubbel x) ;
sv: Cylindriska Neumann-funktioner

sv: Cylindriska Bessel-funktioner av det andra slaget

dubbel cyl_neumann (dubbel nu, dubbel x) ;
Ofullständig normal elliptisk integral av 1:a slaget dubbel ellint_1 (dubbel k, dubbel phi);
Ofullständig normal elliptisk integral av 2:a slaget dubbel ellint_2 (dubbel k, dubbel phi);
Ofullständig normal elliptisk integral av 3:e slaget dubbel ellint_3 (dubbel k, dubbel nu, dubbel phi);
Integral exponentialfunktion dubbel expint (dubbel x);
Hermitpolynom dubbel eremit (osignerad n, dubbel x);
sv:Hypergeometrisk serie dubbel hyperg (dubbel a, dubbel b, dubbel c, dubbel x);
sv:Laguerre polynom dubbel laguerre (osignerad n, dubbel x);
sv: Legendre polynom dubbel legendre (osignerad l, dubbel x);
Riemann zeta funktion dubbel riemann_zeta (dubbel x) ;
sv: Sfäriska Bessel-funktioner av det första slaget dubbel sph_bessel (osignerad n, dubbel x) ;
sv: Sfäriskt associerade Legendre-funktioner dubbel sph_legendre (osignerad l, osignerad m, dubbel theta);
sv: Sfäriska Neumann-funktioner

sv: Sfäriska Bessel-funktioner av det andra slaget

dubbel sph_neumann (osignerad n, dubbel x) ;

Varje funktion har ytterligare två alternativ. Att lägga till ett F' eller 'L' suffix till ett funktionsnamn ger en funktion som verkar på flytande respektive långa dubbla värden. Till exempel:

float sph_neumannf ( osignerad n , float x ) ; lång dubbel sph_neumannl ( osignerad n , lång dubbel x ) ;

Behållare

Typen för tuppel är tuppel, baserad på Boost Tuple, liknande tillägget std:pair för fler objekt.

Typen för arrayer med fast längd är array, baserad på Boost Array.

Hash-behållare

Rubrikfiler unordered_set, unordered_map. Typer unordered_set, unordered_multiset, unordered_map, unordered_multimap (liknar set, multiset, map, multimap). De ger en konstant åtkomsttid i genomsnitt, men i värsta fall kommer varaktigheten av operationen att ha linjär komplexitet på antalet element i behållaren.

Reguljära uttryck

regex-huvudfil, tillhandahåller regex, regex_match, regex_search, regex_replace, etc. Baserat på Boost RegEx

C-kompatibilitet

Ett av koncepten i utvecklingen av C++ var att göra det så kompatibelt som möjligt med programmeringsspråket C. Detta koncept var dock inte och är inte en prioritet, utan endast starkt rekommenderad, och därför kan C ++ inte i strikt mening betraktas som en superset av C (standarderna för dessa språk skiljer sig åt). TR1 är ett försök att förena några av skillnaderna mellan dessa språk genom att lägga till olika rubriker till följande C++-bibliotek: <complex>, <locale>, <cmath>etc. Dessa ändringar hjälper till att bringa C++ i linje med C99 (inte alla delar av C99 ingår i TR1).

Teknisk rapport 2

Det fanns planer på att publicera nästa uppsättning tillägg, C++ Technical Report 2 , efter C++11- standardiseringen [1] . Men standardiseringskommittén övergav sedan TR2 till förmån för kompakta, domänspecifika specifikationer [2] .

Några av de föreslagna tilläggen:

Se även

Anteckningar

  1. TR2-inbjudan att lämna förslag . Hämtad 17 april 2013. Arkiverad från originalet 18 april 2013.
  2. TR2 är död; flera TR kommer istället .  (inte tillgänglig länk)

Litteratur

Länkar