大阪Effective Modern C++勉強会 #4
大阪Effective Modern C++勉強会 #4に参加してきました。今回の参加者は8人です。
今回のメインテーマは「autoが便利な時・便利じゃない時」と「初期化の書き方」です。 前回に比べて読み進めるのは難しくなってきてますね・・・はい。
ただ、不思議なことに今回のトピックには僕がその短いC++歴で引っかかった内容が多く紹介されており、つらい気持ちになりました。 僕が昔踏んで、今日読んだ範囲に紹介されていたのは以下のようなものです。
#include<bits/stdc++.h> int main(){ std::unordered_map<std::string, int> mp{{"hoge", 1}, {"fuga", 3}}; for(std::pair<std::string, int>&& p : mp){ ++p.second; } std::cout << mp["hoge"] << " , "<< mp["fuga"] << std::endl; //output "1 , 3" }
これはstd::unordered_map<std::string, int>の要素がstd::pair<const std::string, int>型であることに由来して起こるもので、 いくら&&をつけていようが、const std::stringをstringに落とすには新しいオブジェクトを作るしかないので、 ++p.secondは一時的に生成されたオブジェクトに実行され、mpの要素のpairには適用されない、ということらしいです。
ちなみに、生半可な知識でstd::pair<std::string, int>&という風に昔書いてて、コンパイルエラーを食らいましたね。 理由はconstが・・・っていう上のやつです。 知識は今も生半可ですが、それでもちょっとずつはC++力がついてきているのかなあ・・・??って思ってます。まだまだまだまだだけど。
前回の繰り返しですが、読書会に関わった全ての型に感謝です。
さて次回は2/15ということで、期末試験前日です。気合入れて読書会行かなきゃ。
このあたりで僕は、精度を落とす専用のcastについて調べてきます。