-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
auto キーワードを使って iterator 変数の宣言を簡潔にする #288
Conversation
正規表現で
これは iterator というキーワードは含むが、実際には CMemoryIterator という名前の |
CMemoryIteratorはイテレータじゃないです。 |
PRの趣旨は基本的に賛成です。 たとえば・・・ sakura/sakura_core/CHokanMgr.cpp Line 181 in 27a4524
for( CPlug::Array::iterator it = plugs.begin(); it != plugs.end(); ++it ){
//インタフェースオブジェクト準備
CWSHIfObj::List params;
std::wstring curWord = pszCurWord;
CComplementIfObj* objComp = new CComplementIfObj( curWord , this, nOption );
objComp->AddRef();
params.push_back( objComp );
//プラグイン呼び出し
(*it)->Invoke( pcEditView, params );
objComp->Release();
} ぼく基準で書き直すとこうなります。 for( auto it = plugs.begin(); it != plugs.end(); ++it ){
//個々のプラグインを取得
auto plug = *it;
//インタフェースオブジェクト準備
CWSHIfObj::List params;
auto objComp = new CComplementIfObj( pszCurWord , this, nOption );
objComp->AddRef();
params.push_back( objComp );
//プラグイン呼び出し
plug->Invoke( pcEditView, params );
objComp->Release();
} この修正量を「 auto 対応」で直してしまってよいか疑問に思っています。 |
自分がこのPR用にコード変更してた際は、 |
自分的にはどちらの書き方でも(一時変数を導入するか)良いと思います。 @berryzplus さんの案に合わせておきますか? |
|
sakura_core/macro/CCookieManager.cpp
Outdated
@@ -37,7 +37,7 @@ SysString CCookieManager::GetCookie(LPCWSTR scope, LPCWSTR cookieName) const | |||
return SysString(L"", 0); | |||
} | |||
wstring key = cookieName; | |||
std::map<wstring, wstring>::const_iterator keyVal = cookies->find(key); | |||
const auto& keyVal = cookies->find(key); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
イテレータを参照型で受け取るのって一般的です?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
素直に auto keyVal = cookies->find(key);
でも keyVal の型は自動的に std::map<wstring, wstring>::const_iterator
になりますが、それでは不十分と判断されたのでしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確かに素直に auto にしておいた方が良さそうですね。
コメントを入れた「そこで参照型を使う?」以外は概ね良い感じに見えました。 一括変換とはいえこの規模であれば目で追ってレビューできます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
auto による記載の簡潔化に加えて、変数宣言のスコープが広すぎるような悪しき文化もじわじわと駆逐する姿勢が感じられてとても良いです。
マ~ジしちゃいます。他にも話したいことある雰囲気も感じますが、そのへんの続きは別Issueか別PRでやりましょうかね。 |
…られる記述を訂正する ### 確認方法 ```cmd mingw32-make macro/CMacroFactory.o ``` 以下のエラーが消えることを確認する ```cmd macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}' auto& c_it = m_mMacroCreators.begin(); ```
…られる記述を訂正する rvalueの非const参照を宣言してはならないという以下エラーの対応 macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}' auto& c_it = m_mMacroCreators.begin();
auto キーワードを使って iterator 変数の宣言を簡潔にする
…られる記述を訂正する rvalueの非const参照を宣言してはならないという以下エラーの対応 macro/CMacroFactory.cpp:92:37: error: invalid initialization of non-const reference of type 'std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>&' from an rvalue of type 'std::__cxx11::list<CMacroManagerBase* (*)(const wchar_t*)>::iterator {aka std::_List_iterator<CMacroManagerBase* (*)(const wchar_t*)>}' auto& c_it = m_mMacroCreators.begin();
C++11 の auto キーワードを使用して変数の型宣言を省きました。
カウンタ変数のスコープを狭めたりもしています。