C++: Forskelle mellem versioner

Content deleted Content added
Gendanner sidste gode version fra 3. januar
Tag: Manuel tilbagerulning
Kørt up-to date. Den tidligere version var håbløst forældet.
Linje 10:
Den første C++-kompiler hed [[CFRONT]] og oversatte C++-kode til maskinafhængig C-kode. Det regnedes for en rigtig compiler, da den i modsætning til [[præprocessor]]er udførte fuld [[syntaks (programmering)|syntaktisk]] og [[semantik (programmering)|semantisk]] tjek af [[kildekode]]n.
 
== Filosofi ==
Filosofien bag C++ er at det skal være et højt ydelses sprog der, måske bortset fra Assembler, ikke har behov for noget lavere-liggende sprog. Centralt her er princippet om "Zero cost abstractions" (gratis abstraktionsniveau) hvor de i sproget indbyggede faciliteter (f.eks. virtuelle funktioner) ikke må kunne implementeres hurtigere ved at brugeren skriver speciel kode. Med udviklingen af moderne kompilere er dette lykkedes i en grad så man er begyndt at tale om "negative cost abstractions", altså at man ved at skrive højniveau kode kan skrive kode, der kører hurtigere og mere effektivt end sammenlignelig C-kode.
C++ er et multi paradigme sprog, der understøtter procedural kode (com i C eller Pascal), objekt-orienteret kode og [[Funktionsprogrammering|funktionsorienteret]] programmering.
 
== Ressource håndtering ==
I modsætning til mange populære sprog såsom [[Java (programmeringssprog)|Java]] og [[C Sharp|C#]] er der ingen support for garbage collection i C++. I stedet danner man objekter, der når de dannes henter deres ressourcer og når de destrueres frigiver dem. Dette er en mere generel metode da man her kan kontrollere alle ressource-typer (f.eks. filer og låse) og ikke blot hukommelse. Det kræver så til gengæld mere disciplin da man i god C++ kode skal huske altid at indkapsle sine ressourcer i et objekt.
== Objektorienterede egenskaber ==
C++'s [[objektorienteret|objektorienterede]] (OOP) syntaks er primært inspireret af [[Simula 67]]. Det andet C-baserede programmeringssprog, [[Objective-C]], der konkurrerer med C++, får sin OOP-syntaks andetsteds fra. C++ er også inspireret af [[ALGOL 68]], [[Ada (programmeringssprog)|Ada]], [[CLU]] og [[ML]]. Sprog som [[Java (programmeringssprog)|Java]] og [[C Sharp|C#]] er inspireret af C++ og får mange af deres features samt syntaks herfra.
Line 41 ⟶ 47:
<syntaxhighlight lang="cpp">
#include <iostream>
 
using namespace std;
 
int main()
{
std::cout << "Hello World!\n" << endl;
return 0;
}
Line 52 ⟶ 56:
 
== Kompatibilitet med C ==
Da [[Bjarne Stroustrup]] udviklede C++, lagde han stor vægt på, at C++ skulle fungere som en udvidelse til C. Af denne grund er alle basale features identiske med C, fx operatorancinitetoperator præcedens. Dette gør det muligt at kompilereportere C-kode med entil C++-kompiler,. hvilketEt gør,problem at dether er nemt løbende at porte et C-projekt til C++. Ethar problem er dog at noglefærre implicitte konverteringsregler er ændret. I C er følgende udtryk tilladtkonverteringer:
<syntaxhighlight lang="cpp">
int* i = malloc(sizeof(int) * 5); /* Implicit konvertering fra void* til int* */
Line 62 ⟶ 66:
 
== Standardbibliotek ==
Standardbiblioteket i C++ er forholdsvis lille. F.eks. indeholder det ikke faciliteter til flertrådning, grafiske brugergrænseflader eller netværk. Det forventes, at brugeren vælger nogle passende biblioteker til at supplere med disse faciliteter, som f.eks. [[Nokia]]s [[Qt]].
 
Standardbiblioteket indeholder Standard Template Library (STL). STL indeholder en række klassedefinitioner, templates samt funktioner, der tilsammen implementerer de mest almindelige programmeringsopgaver, såsom sortering, søgning, tekstmanipulation, filhåndtering og andre lignende. Dette bibliotek er sammen med sproget for tiden i gang med en større revision, hvor bl.a. dele af [[Boost]]-biblioteket sandsynligvis vil blive inkluderet. Den nye C++-revision hedder C++11.
 
C++ bliver løbende revideret. Den første egentlige revision var C++11 (fra 2011), der blandt andet tilføjede en hukommelses model med support for flertrådet programmering, variadiske templates, lambdas og flere dele af boost såsom shared_ptr. Det var oprindelig meningen at den nye version af C++11 skulle være klar meget tidligere, men standardiseringen tog længere tid end forventet og derfor besluttedes det at fremtidige revisioner skulle laves hvert tredie år. Siden har C++14, C++17 og C++20 set dagens lys hvor de to sidste cifre angiver årstallet for udgivelsen.
Standardbiblioteket indeholder Standard Template Library (STL). STL indeholder en række klassedefinitioner, templates samt funktioner, der tilsammen implementerer de mest almindelige programmeringsopgaver, såsom sortering, søgning, tekstmanipulation, filhåndtering og andre lignende. Dette bibliotek er sammen med sproget for tiden i gang med en større revision, hvor bl.a. dele af [[Boost]]-biblioteket sandsynligvis vil blive inkluderet. Den nye C++-revision hedder C++11.
 
Derudover indeholder C++ hele standardbiblioteket fra C.