gpt4 book ai didi

c++ - 传递参数之间的区别

转载 作者:行者123 更新时间:2023-12-01 15:11:00 24 4
gpt4 key购买 nike

大家好我已经写了两个代码

1。

    #include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int t;
t = *x;
*x = *y;
*y = t;
}
int main()
{
int a = 10, b = 20;
cout << "value of a before swap " << a << endl;
cout << "value of b before swap " << b << endl;
swap(&a, &b);
cout << "value of a after swap " << a << endl;
cout << "value of b after swap " << b << endl;
cin.get();

}

2。
    #include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int t;
t = *x;
*x = *y;
*y = t;
}
int main()
{
int a = 10, b = 20;
cout << "value of a before swap " << a << endl;
cout << "value of b before swap " << b << endl;
swap(a, b);
cout << "value of a after swap " << a << endl;
cout << "value of b after swap " << b << endl;
cin.get();

}

在两种情况下,我得到的输出都与
掉期前的值(value)10
交换20之前b的值
掉期后的值(value)20
交换10之后b的值

我的第一个问题是
swap(&a,&b)和swap(a,b)对swap函数没有影响吗?

但是当我给下面的交换函数给相同的参数时
void swap(int &x, int &y)
{
int t;
t = x;
x = y;
y = t;
}

swap(a,b)没有问题,工作正常,但是当我将值传递给swap(&a,&b)代码时,报错
错误C2665:“交换”:3个重载均不能转换所有参数类型
为什么??

最佳答案

在第一个程序中,调用了您自己的指针交换函数。

在第二个程序中,由于不合格的名称查找和using指令的存在,对于类型std::swap的对象称为标准函数int

在第三个程序中(当您提供ab时),称为您自己的函数交换,该函数交换通过引用接受int类型的对象。如果模板和非模板函数均适用,则编译器倾向于使用非模板函数。

但是您在第四个程序中的交换函数并非旨在交换指针。因此,编译器尝试选择标准交换函数std::swap。但这不是为了交换临时(右值)对象而设计的。因此,编译器发出错误。

如果引入的中间变量将包含指向变量ab的指针,则可以调用标准交换函数。

这是一个演示程序。

#include<iostream>
using namespace std;

void swap(int &x, int &y)
{
int t;
t = x;
x = y;
y = t;
}

int main()
{
int a = 10, b = 20;
int *pa = &a;
int *pb = &b;

cout << "value of *pa before swap " << *pa << endl;
cout << "value of *pb before swap " << *pb << endl;

swap( pa, pb);

cout << "value of *pa after swap " << *pa << endl;
cout << "value of (pb after swap " << *pb << endl;

cin.get();

}

它的输出是
value of *pa before swap 10
value of *pb before swap 20
value of *pa after swap 20
value of (pb after swap 10

在此程序中,不会调用您自己的函数swap,因为其参数是对 int类型的对象的引用,但是您正在调用 int *类型的swap传递对象(指针)。

因此,将调用专用于 std::swap类型的对象的标准函数 int *

它交换指针本身而不是指针指向的对象。

关于c++ - 传递参数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com