C++メモ for each文で値を変更できるように値を参照渡し(リファレンス)にしてみる

C++

前に便利になったなぁと自己満足していた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

んまま、メモってことで。