C++ teknisk rapport 1

C++ Technical Report 1 (TR1) er det generiske navn for ISO/IEC TR 19768-standarden, C++ Extension Libraries er et dokument, der foreslår tilføjelser til C++-biblioteksstandarden. Tilføjelser inkluderer regulære udtryk , smarte pointere , hashtabeller og tilfældige talgeneratorer . TR1 er ikke en standard, men derimod et udkast til dokument. De fleste af hans forslag blev dog en del af den næste officielle standard, C++11 .

Dokumentet blev først distribueret som et udkast til Draft Technical Report on C++ Library Extensions , derefter udgivet som en ISO/IEC-standard i 2007 under titlen ISO/IEC TR 19768:2007 .

Tilføjelser beskrevet i TR1

Alle tilføjelser, som TR1 beskriver, er i navnerummet std::tr1

Generelle hjælpeprogrammer

Funktionelle objekter

Defineret i header-fil tr1/functional

Metaprogrammering og typetræk

Flere metatemplates er defineret i tr1/functional : is_pod, has_virtual_destructor, remove_extent og andre. Baseret på Boost Type-træk.

PRNG

Tr1/random header-filen definerer:

Særlige matematiske funktioner

Nogle funktioner i TR1, såsom specielle matematiske funktioner og nogle C99- tilføjelser , der ikke er inkluderet i Visual C++-implementeringen af ​​TR1.

Disse tilføjelser nåede ikke ind i C++11.

Den følgende tabel viser alle 23 specialfunktioner beskrevet i TR1.

Funktionsnavn Funktionsprototype matematisk udtryk
Generaliserede Laguerre polynomier dobbelt assoc_laguerre (usigneret n, usigneret m, dobbelt x);
Tilknyttede Legendre polynomier dobbelt assoc_legendre (usigneret l, usigneret m, dobbelt x);
beta funktion dobbelt beta (dobbelt x, dobbelt y);
Komplet normal elliptisk Legendre integral af 1. slags dobbelt comp_ellint_1 (dobbelt k) ;
Komplet normal elliptisk Legendre integral af 2. slags dobbelt comp_ellint_2 (dobbelt k) ;
Komplet normal elliptisk Legendre integral af 3. slags dobbelt comp_ellint_3 (dobbelt k, dobbelt nu);
Degenererede hypergeometriske funktioner dobbelt conf_hyperg (dobbelt a, dobbelt c, dobbelt x);
Almindelige cylindriske besselfunktioner dobbelt cyl_bessel_i (dobbelt nu, dobbelt x) ;
Cylindriske Bessel-funktioner af den første slags dobbelt cyl_bessel_j (dobbelt nu, dobbelt x) ;
da: Uregelmæssige modificerede cylindriske Bessel-funktioner dobbelt cyl_bessel_k (dobbelt nu, dobbelt x) ;
da: Cylindriske Neumann-funktioner

da: Cylindriske Bessel-funktioner af den anden slags

dobbelt cyl_neumann (dobbelt nu, dobbelt x);
Ufuldstændigt normalt elliptisk integral af 1. slags dobbelt ellint_1 (dobbelt k, dobbelt phi);
Ufuldstændigt normalt elliptisk integral af 2. slags dobbelt ellint_2 (dobbelt k, dobbelt phi);
Ufuldstændigt normalt elliptisk integral af 3. slags dobbelt ellint_3 (dobbelt k, dobbelt nu, dobbelt phi);
Integral eksponentiel funktion dobbelt ekspint (dobbelt x);
Hermite polynomier dobbelt eremit (usigneret n, dobbelt x);
da: Hypergeometrisk serie dobbelt hyperg (dobbelt a, dobbelt b, dobbelt c, dobbelt x);
da: Laguerre polynomier dobbelt laguerre (usigneret n, dobbelt x);
da: Legendre polynomier dobbelt legendre (usigneret l, dobbelt x);
Riemann zeta funktion dobbelt riemann_zeta (dobbelt x);
da: Kugleformede Bessel-funktioner af den første slags dobbelt sph_bessel (ufortegn n, dobbelt x);
en:Sfærisk associerede Legendre-funktioner dobbelt sph_legendre (usigneret l, usigneret m, dobbelt theta);
da: Sfæriske Neumann-funktioner

da: Sfæriske Bessel-funktioner af den anden slags

dobbelt sph_neumann (usigneret n, dobbelt x);

Hver funktion har to ekstra muligheder. Tilføjelse af et F' eller 'L' suffiks til et funktionsnavn giver en funktion, der virker på henholdsvis flydende eller lange dobbelte værdier. For eksempel:

float sph_neumannf ( usigneret n , float x ) ; lang dobbelt sph_neumannl ( ufortegn n , lang dobbelt x ) ;

Containere

Typen for tuples er tuple, baseret på Boost Tuple, svarende til std:pair-udvidelsen for flere objekter.

Typen for arrays med fast længde er array, baseret på Boost Array.

Hash-beholdere

Header-filer unordered_set, unordered_map. Typer unordered_set, unordered_multiset, unordered_map, unordered_multimap (svarende til set, multiset, map, multimap). De giver en konstant adgangstid i gennemsnit, men i værste fald vil varigheden af ​​operationen have lineær kompleksitet på antallet af elementer i containeren.

Regulære udtryk

regex header-fil, giver regex, regex_match, regex_search, regex_replace osv. Baseret på Boost RegEx

C-kompatibilitet

Et af koncepterne i udviklingen af ​​C++ var at gøre det så kompatibelt som muligt med C-programmeringssproget. Dette koncept var dog ikke og er ikke en prioritet, men kun stærkt anbefalet, og derfor kan C ++ ikke i streng forstand betragtes som et supersæt af C (standarderne for disse sprog er forskellige). TR1 er et forsøg på at forene nogle af forskellene mellem disse sprog ved at tilføje forskellige overskrifter til følgende C++-biblioteker: <complex>, <locale>, <cmath>osv. Disse ændringer hjælper med at bringe C++ på linje med C99 (ikke alle dele af C99 er inkluderet i TR1).

Teknisk rapport 2

Der var planer om at offentliggøre det næste sæt tilføjelser, C++ Technical Report 2 , efter C++11- standardiseringen [1] . Standardiseringsudvalget opgav dog efterfølgende TR2 til fordel for kompakte, domænespecifikke specifikationer [2] .

Nogle af de foreslåede udvidelser:

Se også

Noter

  1. TR2 indkaldelse af forslag . Hentet 17. april 2013. Arkiveret fra originalen 18. april 2013.
  2. TR2 er død; flere TR'er kommer i stedet for .  (utilgængeligt link)

Litteratur

Links