gpt4 book ai didi

c++ - 将值传递给 C++ 中的指针参数

转载 作者:行者123 更新时间:2023-12-01 13:51:38 25 4
gpt4 key购买 nike

在下面的代码中,为什么 swap 函数以两种方式工作,通过将值作为 swap(x,y) 和 swap(&x, &y) 传递。

int main(){

int x, y;

cout << "Enter the values of x and y: ";
cin >> x >> y;

swap(x, y);

cout << "\nSwapped values are, x: " << x << " & y: " << y <<"\n";

return 0;

}

void swap(int *a, int *b){

int s;
s = *a;
*a = *b;
*b = s;

}

最佳答案

这是另一个答案的解释,为什么 std::swap叫做:

当您swap(x, y) ,编译器尝试查找 swap调用过载。假设你写了 using std::swap;using namespace std; , 允许编译器查看的命名空间将是全局的和 std .

样机void swap(int, int)是预期的,但编译器对选项持开放态度——在寻找可行的重载时,具有相同名称、相同参数数量但需要强制转换的不同参数类型的函数也可以;在枚举它们之后,它会选择最接近的匹配项。

您在全局命名空间中实现的类型是

void swap(int*, int*);

但由 standard library header <utility> 给出的是一个函数模板
namespace std {
template <typename T>
void swap(T&, T&);
}

此重载变为 void swap(int&, int&)T = int .现在这是一个身份匹配(不需要类型强制),因此赢得了重载决议。

如果你没有写 using std::swap;using namespace std; ,那么编译器可用的唯一可能的重载就是你的,你会得到一个错误,说参数类型不匹配。修复它会修复调用代码以通过 int* (这些变量的地址是指向 int 的指针类型)而不是 int :
swap(&x, &y);

关于c++ - 将值传递给 C++ 中的指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39743439/

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