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;
}
好吧,目标是交换两个字符串的第一个元素,但我为此创建了一个通用函数,甚至做对了。但是,出乎意料的是,我没有使用pass by reference或pointer!即使如此,当我试图最终输出a和b时,变化也是永久性的。即使这样,当我试图在最后输出a和b的时候,这些变化也是永久性的!
从逻辑上讲,它不应该工作,但它 是 工作。是不是和字符串有关?
这几乎可以肯定是由于,在你没有给我们看的代码中的某个地方,你有这一行(或非常类似的东西)。
using namespace std;
包括这一行,那么这个非常 namespace std
定义一个函数如下。
void swap(_Ty& _Left, _Ty& _Right);
其中 _Ty
模板被替换为 char
在你 swap(a[0],b[0]);
呼叫。
添加一个简单的 cout << "My Swap" << endl;
行至 你的 swap
函数,你会发现它没有被调用。
强烈推荐阅读。为什么 "使用命名空间std; "被认为是不好的做法?.