• Keine Ergebnisse gefunden

C++ im Fluss der Zeit

N/A
N/A
Protected

Academic year: 2022

Aktie "C++ im Fluss der Zeit"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

C++

im Fluss der Zeit

Finn Masurat

Seminar SS2016

(2)

Übersicht der Präsentation

- Geschichte
 - Kritik

- Die neuen Standards: C++11 und C++14

- Blick in die Zukunft: C++17

(3)

Geschichte der Sprache

- Zwischen 1983 und 1985: Einführung von C++

- C++ als Erweiterung von C

- Aus C mit Klassen -> C++

(4)

Geschichte der Sprache

- Bjarne Stroustrup - Erfinder der Sprache C++

- Ab 2000er: Starke Zurückdrängung durch Java

- 2005: Ankündigung des neuen Releases C++0x

(5)

Kritik an C++

- Verhalten von Sprachkonstrukten nicht definiert - Fehlerhafter Quellcode wird absurd umgesetzt

- Niemals nur eine Operation ungültig

(6)

Kritik an C++

- Komplex und fehleranfällig

- “In C++, it’s harder to shoot yourself in the foot
 but when you do, you blow off your whole leg“

Bjarne Stroustrup

(7)

C++11 und C++14 Features

- System und Bibliotheken Programmierung

- Vereinfachung der Sprache

(8)

“auto“

- Wie “var“ in anderen Programmiersprachen - Vor C++11:


Ausdruck für den automatischen Stackzuweis

(9)

int main() {

auto var1 = 4;

auto var2 = 3.45;

auto var3 = “autoauto“;

auto var4 = new double[10];

}

(10)

int main() {

list<int> numbers;

for(int i = 0; i < 10; i++){

numbers.push_back(i*i);

}

for(list<int>::iterator it = numbers.begin();

it != numbers.end(); it++){

cout << *it << “ “;

}

(11)

int main() {

list<int> numbers;

for(int i = 0; i < 10; i++){

numbers.push_back(i*i);

}

for(auto it = numbers.begin();

it != numbers.end(); it++){

cout << *it << “ “;

}

(12)

auto sum(int i, int k){

return i + k;

}

(13)

int main() {

int count = 10;

int& countRef = count;

auto myAuto = countRef;

countRef = 11;

cout << count << “ “;

myAuto = 12;

cout << count << endl;

}

(14)

“decltype“

- Fragt den Typ eines Ausdruckes ab

- Oft in der generischen Programmierung verwendet

(15)

int main() {

int r = 10;

decltype(r) dr = 5;

}

(16)

int main() {

int i = 10;

int& r = i;

auto ar = r;

decltype(r) dr = r;

const int konstante = 5;

auto ak = konstante;

decltype(konstante) = kontante }

(17)

“trailing return type“

- Rückgabewert der Funktion nach Parameterübergabe

- Wird zusammen mit auto und decltype() verwendet

(18)

int sum(int i, int k) { return i+k;

}

(19)

auto sum(int i, int k) -> int { return i+k;

}

(20)

template<class T>

decltype(i+k) sum(T i, T k){

return i+k;

}

(21)

template<class T>

auto sum(T i, T k) -> decltype(i+k){

return i+k;

}

(22)

template<typename T1, typename T2>

auto sum(T1 i, T2 k) -> decltype(i+k){

return i+k;

}

(23)

“strongly-typed enums“

- Enum Klasse mit eigenem Scope

(24)

int main() {

enum Animals {Bear, Chicken, Cat};

enum Birds {Eagle, Duck, Chicken};

enum class Animals {Bear, Chicken, Cat);

enum class Birds {Eagle, Duck, Chicken};

}

(25)

int main() {

enum Animals {Bear, Chicken, Cat};

enum Colors {Red, Blue, Green};

if (Red < Chicken) {

}

}

(26)

“nullpointer“

- Verhindert Mehrdeutigkeit

- Keine Überladung einzelner Methoden

(27)

void f(int) {

cout << “integer f“ << endl;

};

void f(char*) {

cout << “char* f“ << endl;

};

int main() { f(0);

f(NULL);

f(nullptr);

}

(28)

int main() {

char* i = nullptr;

if ( i == 0) {

cout << 0 << endl;

}

i = 0;

if ( i == nullptr) { cout << “nullptr“;

} }

(29)

Weitere neue Feature

- Range Based Loop

- Lambda-Ausdrücke

- constexpr

(30)

Blick in die Zukunft - C++17

- Unnötige Funktionen werden entfernt

- Weiterer Fokus auf die generische Programmierung

- Die Sprache attraktiver gestalten

(31)

Ende

(32)

Quellen

- E. Niebler, D.Gregor, J. Widman, US22/DE9 Revisited:

Decltype and Call Expressions, Working Paper N3276, ISO/IEC JTC1 SC22 WG21 (März 2011).

URL http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf - V. Voutilainen, Auto and braced-init-lists, Working Paper N3681,

ISO/IEC JTC1 SCC22 WG21 (Mai 2013).

URL http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3681.html

- Breymann, Ulrich, Der C++-Programmierer: C++ lernen - professionell anwenden
 Lösungen nutzen

Carl Hanser Verlag GmbH & Co. KG; Auflage: 3, (Januar 2014) ISBN-13: 978-3446438941

Referenzen

ÄHNLICHE DOKUMENTE

Wird eine Variable, eine Konstante oder ein Unterprogramm in einer Datei1 definiert und soll in einer anderen Datei2 benutzt werden, dann muss diese Größe in der Datei2

[r]

[r]

unde d in f cadit: si vero bd ipsum it non secuerit, sit c punctum, ubi perpendicularis rectam ab bisecans ipsum pq secat, atque gas—ht ita, ut st Hroductam bd in puncto aliquo F

Bedingte Kompilation: Text dazwischen wird nicht eingesetzt, wenn BEDINGUNG falsch ist. \Hello World&#34; nach Praprozessor:

C++ hat nach diesem Standard einen Aufwind und neue Beliebtheit erlangt und entwickelt sich schnell weiter, sodass 2014 ein weiterer Standard veröffentlicht wurde und bereits in

Zudem soll ex- emplarisch die Übersetzung eines Ausschnittes einer realen Programmbibliothek der PPI AG mit dem entwickelten Übersetzer durchgeführt und evaluiert werden, so dass

• Erhalt und Verbesserung der Arbeitsbewältigungsfähigkeit sind ein Thema für Person und Betrieb.. • Strikte Beachtung der Vertraulichkeit und des