swap(string1,string2)将轻松交换两个字符串值,但如果我在另一个函数中使用它并从main函数调用它将无法工作!
这有效:
int main()
{
string name1="A",name2="B";
swap(name1,name2);
}
但这个没有:
string name1="A",name2="B"; // Global Here
void exchange (string one,string two)
{
swap(one,two);
}
int main()
{
exchange(name1,name2);
}
问题出在哪里?
答案 0 :(得分:6)
传递字符串by reference而不是按值,否则exchange
将修改one
和two
的本地副本。
string name1="A", name2="B"; // Global Here
void exchange(string& one, string& two)
{
swap(one,two);
}
int main()
{
cout << name1 << "\n" << name2 << endl;
exchange(name1, name2);
cout << name1 << "\n" << name2 << endl;
}
<强>输出:强>
A
B
B
A
答案 1 :(得分:2)
嗯,实际的副本 one
和two
的值已被交换。当然,它不会影响变量name1
和name2
。假设您希望交换这些字符串的值,则应通过引用传递参数
void exchange(string& one, string& two) {
...
}
答案 2 :(得分:2)
void exchange (string& one,string& two)
{
swap(one,two);
}
这应该有效。 amperstand(&amp;)表示您通过引用传递参数,并且允许该函数修改作为参数传递的初始字符串。如果你不使用&amp ;,字符串将按值传递,你只会修改实际字符串的副本。