PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Literatur zu C++11/14/17


Marscel
2018-04-17, 12:47:03
Ich habe bei den neueren C++-Standards das Gefühl, dass da a.) immer noch sehr viel cooleres Zeug drin steht, als man Stück für Stück sich zusammensammeln kann und b.) etliche Muster von älterem C++ damit eigentlich obsolet sind.

Könnt ihr Literatur empfehlen, die möglichst weit C++11/14, vielleicht sogar 17 behandelt, auch mit Fokus auf Upgrading von eher älterem C++-Stand?

Rausgesucht habe ich bis jetzt: Scott Meyers, Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14

Brauchbare Alternativen scheinen kaum zu existieren, ein deutsches Galileo Press-Buch wirkt nicht sehr beliebt.

Das ist an der örtlichen Uni-Bibliothek leider rar und vergriffen. Ideen und Vorschläge?

Sweepi
2018-04-17, 18:36:50
Leider keine konkrete Empfehlung für deinen konkreten Fall, aber ich beschäftige mich derzeit mit:

- https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
(enthält auch einige Literaturempfehlungen, z.B. https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-Cplusplus)
- https://google.github.io/styleguide/cppguide.html

Gefunden hatte ich beides hier: https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md#c-1

Simon
2018-04-17, 18:51:45
Sehr gute Erfahrungen hab ich mit den Stroustrup Büchern:

http://www.stroustrup.com/Tour.html

Programming -- Principles and Practice Using C++
http://www.stroustrup.com/programming.html


Und die sehen bisher sehr gut aus (bin 1/3 durch):
Lecture Slides for Programming in C++
[The C++ Language, Libraries, Tools, and Other Topics]

http://www.ece.uvic.ca/~frodo/cppbook/downloads/lecture_slides_for_programming_in_c++-2018-02-15.pdf

Marscel
2018-04-17, 19:05:06
Leider keine konkrete Empfehlung für deinen konkreten Fall, aber ich beschäftige mich derzeit mit:

- https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md


Genau, das habe ich auch schon tiefer durchgeschaut. Das war sogar einer der Hauptgründe, weil ich da mehrere Lücken im Wissenstand bei mir mit neueren Standards bemerkt habe. ;)


Sehr gute Erfahrungen hab ich mit den Stroustrup Büchern:

http://www.stroustrup.com/Tour.html

Programming -- Principles and Practice Using C++
http://www.stroustrup.com/programming.html


Hatte ich auch schon auf der Liste, bei der TOC und Alter war ich bis jetzt unsicher, ob 14 hinreichend beschrieben wird.

Programming -- Principles and Practice Using C++
http://www.stroustrup.com/programming.html


Super, guck ich mal nach.

Und die sehen bisher sehr gut aus (bin 1/3 durch):
Lecture Slides for Programming in C++
[The C++ Language, Libraries, Tools, and Other Topics]

http://www.ece.uvic.ca/~frodo/cppbook/downloads/lecture_slides_for_programming_in_c++-2018-02-15.pdf

Cool, sogar 17, muss man aber vermutlich etwas überfliegen, bei dem, was da sonst noch so drin ist.

Marscel
2018-05-12, 11:37:28
Ich hatte bei Scott Myers zugegriffen und bin ganz zufrieden mit seiner Arbeit.

Laut Microsoft erscheint später im Jahr wohl eine neue Edition von Stroustrup mit Augenmerk auf C++17 - dann wird das ggf. der nächste Griff werden.

Grundkurs
2018-05-12, 11:39:50
Laut Sutter erscheint A Tour of C++ in der zweiten Edition (mit allen C++-17 Änderungen) im Juli 2018: Quelle: https://www.youtube.com/watch?v=UsrHQAzSXkA

Dr.Doom
2018-05-24, 09:01:13
[...]
- https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
[...]

Example, bad

void lower(zstring s)
{
for (int i = 0; i < strlen(s); ++i) s[i] = tolower(s[i]);
}

Yes, this is an example from production code. We leave it to the reader to figure out what's wasted.

Hmm, und was ist da wasted? :confused:

Marscel
2018-05-24, 09:04:57
Hmm, und was ist da wasted? :confused:

CPU-Zyklen: strlen wird für jede Iteration einmal ausgeführt. Brauchen täte man das hier aber nur einmal insgesamt. Der Typ von i ist auch schlecht gewählt, aber ich glaube, das meint er weniger.

Simon
2018-05-24, 19:53:02
CPU-Zyklen: strlen wird für jede Iteration einmal ausgeführt. Brauchen täte man das hier aber nur einmal insgesamt. Der Typ von i ist auch schlecht gewählt, aber ich glaube, das meint er weniger.
Was der Compiler in der Regel auch nur schlecht oder gar nicht optimieren kann, wegen Seiteneffekten.

pest
2018-05-25, 04:21:43
Hmm, und was ist da wasted? :confused:

Gehirnzellen


void strupper1(std::string &s)
{
std::transform(begin(s),end(s),begin(s),::toupper);
}

void strupper2(std::string &s)
{
for (auto &c:s) c=toupper(c);
}

Gast
2018-12-18, 14:11:31
Also strlen(s) wird von jedem compiler weg-optimiert.

void lower(zstring s)

sollte eher:

void lower(zstring &s)

sein. Man weis ja nicht on zstring eine klasse ist.

Die neuen Wrapper ist für Kenner oft überflüssig und machen den Code zur Black-Box, die man nur verstehen kann, wenn man den ganzen background kennt.



std::transform(begin(s),end(s),begin(s),::toupper);

oder

for (int i=0; i<strlen(s); ++i) { s[i] = toupper(s[i]); }

oder

for (string::iterator i=s.begin(); i!=s.end(); ++i) { *i = toupper(*i) }

oder

for (auto i=s.begin(); i!=s.end(); ++i) { *i = toupper(*i) }


ist doch alles das gleiche.

Marscel
2018-12-18, 19:56:05
Also strlen(s) wird von jedem compiler weg-optimiert.

Nein, nicht unbedingt: Nur, wenn die Bedingung als invariant bewiesen ist. Und das ist sie in dem Code-Snippet _so_ nicht:

Wenn du die Semantik ausnutzen würdest, dass trotz Fehlen des `const`-Modifiers für den String `toupper` niemals ein NULL auf ein Nicht-NULL einsetzt und das für die Dauer von `strlen` ja so sein muss, dann würde vielleicht eine aggressive Optimierung klappen. Aber durch das bloße Lesen der Header und des Snippet ist die Antwort schlicht nein, nicht wegoptimierbar.

Das lässt sich ja einfach ausprobieren. Long story short: GCC v7.3.0 mit -O3 optimiert für das Code-Snippet nichts weg, für Clang v6.0 dassselbe.

Gauß
2018-12-21, 16:45:23
Der Standard selbst ist sehr gut lesbar und inhaltlich (selbstverstaendlich) perfekt. Zu wenige Leute verwenden ihn.

https://isocpp.org/std/the-standard