C++メモ for each文で値を変更できるように値を参照渡し(リファレンス)にしてみる
前に便利になったなぁと自己満足していたfor eachに相当する構文を使ったら…値が変更できてないってことになった。
そりゃそうだという内容。
ポイントはこれ。
- forでリストから受け取る変数の型をリファレンスにする
んで、コードはこんなん。
// テスト用のデータを用意する vector<string> objValues; objValues.push_back("aaa"); objValues.push_back("bbb"); // 値渡し(参照渡しでない)の場合 cout << "*** before ***" << endl; for( string strValue : objValues ) { strValue += "ccc"; } for( string strValue : objValues ) { cout << strValue << endl; } // 参照渡しの場合 cout << "*** after ***" << endl; for( string& strValue : objValues ) { strValue += "ccc"; } for( string strValue : objValues ) { cout << strValue << endl; }
実行するとこんなん。
“before"の方は値渡しなんでfor文の処理が終わったあとは元の値のまま(つまり、for文の中でしか変更が有効でない)。
で、"after"の方は参照渡しなんで、for文が終わった後でも文字列が変更されたまま(つまり、for文の外でも変更が有効)になる。
*** before *** aaa bbb *** after *** aaaccc bbbccc
んまま、メモってことで。
ディスカッション
コメント一覧
まだ、コメントがありません