C++ 字符串按值传递
C++ string pass by value
C++ 字符串按值传递在这里让我感到困惑。我期待它打印出来 aa ab ba bb
但是,它打印 aa aab aba abab
。为什么会这样?
std::string s, ab = "ab";
test(s, 0, ab);
void test(std::string s, int i, std::string ab){
if(i == ab.size()){
cout << s << ' ';
return;
}
for(auto c : ab){
s += c;
test(s, i + 1, ab);
}
}
如果我替换
s += c;
test(s, i + 1, ab);
来自
test(s + c, i + 1, ab);
它将按预期工作。
当您使用 +=
时,您会在每次迭代中向 s
添加一个字符,因此您将越来越长的字符串传递给 test
直到 ab
已追加。
如果你展开循环,也许它会变得更明显:
s += ab[0]; // s is now "a"
test(s, i+1, ab);
s += ab[1]; // s is now "ab"
test(s, i+1, ab);
...
s += c;
在每个循环中将 c 附加到本地字符串 s 运行,因此 s 被修改
test(s + c ...)
将c附加到本地字符串s并传递结果字符串,s在每个循环中都相同运行
C++ 字符串按值传递在这里让我感到困惑。我期待它打印出来 aa ab ba bb
但是,它打印 aa aab aba abab
。为什么会这样?
std::string s, ab = "ab";
test(s, 0, ab);
void test(std::string s, int i, std::string ab){
if(i == ab.size()){
cout << s << ' ';
return;
}
for(auto c : ab){
s += c;
test(s, i + 1, ab);
}
}
如果我替换
s += c;
test(s, i + 1, ab);
来自
test(s + c, i + 1, ab);
它将按预期工作。
当您使用 +=
时,您会在每次迭代中向 s
添加一个字符,因此您将越来越长的字符串传递给 test
直到 ab
已追加。
如果你展开循环,也许它会变得更明显:
s += ab[0]; // s is now "a"
test(s, i+1, ab);
s += ab[1]; // s is now "ab"
test(s, i+1, ab);
...
s += c;
在每个循环中将 c 附加到本地字符串 s 运行,因此 s 被修改
test(s + c ...)
将c附加到本地字符串s并传递结果字符串,s在每个循环中都相同运行