Informator i Kina, del 1

Så var jag på plats i Nanjing (södra Kina) för andra gången. Uppdraget denna vecka är kursen TE1002 Advanced C++ and Threads Programming. Nytt för i år att jag gjort en "extreme makeover" av kursen och baserat den på nya språkstandarden C++11.

Förra gången jag var här i juli 2011, så var det gräsligt varmt och fuktigt (35+ C). Nu i september är det emellertid svalare och mer likt en typisk svensk sol-sommar. Efter den första dagen och återkomsten till hotellet, så smet jag iväg för en Frappucino Mocha på Starbucks, runt hörnet, sittandes utomhus i trafiklarmet och stöket.

Mellan hotellet och där jag undervisar, går det en arrangerad busstransport. Det är helt trollbindande att kika på den omgivande trafiken. Det trängs och tutas om vart annant. Som Stockholms-bilist, tycker man ju att det vi har är tufft. Men icke då, inte jämfört med trafiken här. Med blott centimetrar tillgodo så tränger både bilar och stora bussar sig fram. Det är ett under att vi kommer fram helskinnande och utan plåtskador.




Första kursdagen började med en genomgång av de nya språktilläggen i C++11. Här är en förkortad lista av vad vi pratade om:

*    Compile-time duck-typing (keyword: auto):
    Möjligheten att låta kompilatorn lista ut typen för en variabel. Exempel:
    map  words; words["c++"] = 1; words["informator"]++; words["threads"] += 2;
    for (auto it = words.begin(); it != words.end(); ++it) cout << it.first << << "=" << it.second << endl;

*   Static initializer list:
    Möjligheten att statiskt initialisera ett object (t.ex. container). Exempel:
    map  words = {{"c++",1}, {"informator",1}, {"threads",2}};
    for (auto it = words.begin(); it != words.end(); ++it) cout << it.first << << "=" << it.second << endl;

*   For-each loop (kombinerat med auto):
    Möjligheten att enkelt loopa över element i en samling: Exempel:
    map  words = {{"c++",1}, {"informator",1}, {"threads",2}};
    for (auto& e : words) cout << e.first << << "=" << e.second << endl;

*   Closures (kallas lambda i C++11):
    Möjligheten att skapa anonyma funktionsuttryck och behandla dessa som vanlig data. Exempel:
    map  words = {{"c++",1}, {"informator",1}, {"threads",2}, {"c++11",4}};
    auto print = [](string key, int value){cout << key << "=" << value << endl;}
    for (auto& e : words) print(e.first, e.second);

*   Rvalue references, move-semantics och s.k. move-constructor.
*   Multi-line strings.
*   UTF och Unicode strings.
...och en stor mängd andra nyheter med...

Missa inte nästa inlägg, för att få veta vad vi pratat om på andra kursdagen.

Tjing-tjong från Kina,
    /jens



Författare: Jens Riboe

Skicka en kommentar

Trevligt att du vill dela med dig av dina åsikter! Tänk på att hålla på "Netiketten" och använda vårdat språk.