为什么会有这样的效果?我无法理解这种交换的逻辑。

问题描述 投票:0回答:1
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的时候,这些变化也是永久性的!

从逻辑上讲,它不应该工作,但它 工作。是不是和字符串有关?

c++ string pass-by-reference pass-by-value
1个回答
6
投票

这几乎可以肯定是由于,在你没有给我们看的代码中的某个地方,你有这一行(或非常类似的东西)。

using namespace std;

如果包含这行,那么这个非常 namespace std 定义一个函数如下。

void swap(_Ty& _Left, _Ty& _Right);

其中 _Ty 模板被替换为 char 在你 swap(a[0],b[0]); 呼叫。

添加一个简单的 cout << "My Swap" << endl; 行至 你的 swap 函数,你会发现它没有被调用。

强烈推荐阅读。为什么 "使用命名空间std; "被认为是不好的做法?.

© www.soinside.com 2019 - 2024. All rights reserved.