1

当我在主函数中使用它时,swap(string1,string2) 将轻松交换两个字符串值,但如果我在另一个函数中使用它并从主函数调用它,它将不起作用!

这有效:

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);
}

问题出在哪里?

4

3 回答 3

6

通过引用而不是通过值传递字符串,否则将修改andexchange的本地副本。onetwo

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
于 2013-09-25T18:32:25.677 回答
2

好吧,副本 one的值two实际上交换的。它不会影响变量name1name2当然。假设您希望交换这些字符串的值,您应该通过引用传递参数

void exchange(string& one, string& two) {
    ...
}
于 2013-09-25T18:17:59.977 回答
2
void exchange (string& one,string& two)
{
    swap(one,two);
}

这应该有效。符号 (&) 表示您通过引用传递参数,并且允许该函数修改作为参数传递的初始字符串。如果不使用 &,则字符串将按值传递,并且您只会修改实际字符串的副本。

于 2013-09-25T18:18:36.070 回答