为什么这是有效的?我无法理解这种交换的逻辑
Why is this working? I cannot understand the logic of this swapping
int main() {
// Complete the program
string a,b;
getline(cin,a);
getline(cin,b);
cout<<a.size()<<" ";
cout<<b.size();
string c=a+b;
cout<<endl<<c;
swap(a[0],b[0]);
cout<<endl<<a<<" "<<b;
return 0;
}
void swap(string s1,string s2){
string temp=s1;
s1=s2;
s2=temp;
}
好吧,目标是交换两个字符串的第一个元素,但我为此创建了一个通用函数,甚至做对了。但是,出乎意料的是,我没有使用引用传递或指针传递!即便如此,当我最后尝试输出 a 和 b 时,更改是永久性的!
从逻辑上讲它不应该工作,但它 工作。跟琴弦有关系吗?
这几乎可以肯定是因为,在您没有向我们展示的代码中的某处,您有这一行(或非常相似的内容):
using namespace std;
加上这一行,那么namespace std
定义了一个函数如下:
void swap(_Ty& _Left, _Ty& _Right);
在您的 swap(a[0],b[0]);
调用中 _Ty
模板被替换为 char
。
向你的 swap
函数添加一个简单的cout << "My Swap" << endl;
行,你会发现它没有被调用。
强烈推荐阅读:Why is "using namespace std;" considered bad practice?。
int main() {
// Complete the program
string a,b;
getline(cin,a);
getline(cin,b);
cout<<a.size()<<" ";
cout<<b.size();
string c=a+b;
cout<<endl<<c;
swap(a[0],b[0]);
cout<<endl<<a<<" "<<b;
return 0;
}
void swap(string s1,string s2){
string temp=s1;
s1=s2;
s2=temp;
}
好吧,目标是交换两个字符串的第一个元素,但我为此创建了一个通用函数,甚至做对了。但是,出乎意料的是,我没有使用引用传递或指针传递!即便如此,当我最后尝试输出 a 和 b 时,更改是永久性的!
从逻辑上讲它不应该工作,但它 工作。跟琴弦有关系吗?
这几乎可以肯定是因为,在您没有向我们展示的代码中的某处,您有这一行(或非常相似的内容):
using namespace std;
加上这一行,那么namespace std
定义了一个函数如下:
void swap(_Ty& _Left, _Ty& _Right);
在您的 swap(a[0],b[0]);
调用中 _Ty
模板被替换为 char
。
向你的 swap
函数添加一个简单的cout << "My Swap" << endl;
行,你会发现它没有被调用。
强烈推荐阅读:Why is "using namespace std;" considered bad practice?。