在指针的帮助下交换时无法生成错误
Unable to generate an error in a case of swap with help of pointers
我试图在 C++ 中的交换代码中生成错误。有趣的是,它没有错误,而是成功地显示了相反的结果。我的代码如下所示:
#include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int *tmp = x;
x = y;
y = tmp;
}
int main()
{
int u = 10;
int v = 20;
int * p = &u;
int * q = &v;
swap(*p, *q);
std::cout<<"u :-"<<u<<" v :-"<<v<<endl;
return 0;
}
u
和 v
的值被交换了。在这里,我传递的是指针值而不是引用,但是值被交换了,如何?
可以在以下位置找到确切的代码:
https://ideone.com/kMJHL6
我认为你调用的是算法库的交换函数,而不是你的函数
swap(*p, *q);
由于 *p
和 *q
的类型 而不是 int *
,(只是 int
)此代码 不会 调用您的 swap
函数。相反,它通过函数重载解析调用标准C++库中的函数std::swap
。
您的代码有 using namespace std;
- 您的案例是说明您不应该使用它的原因之一。
我试图在 C++ 中的交换代码中生成错误。有趣的是,它没有错误,而是成功地显示了相反的结果。我的代码如下所示:
#include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int *tmp = x;
x = y;
y = tmp;
}
int main()
{
int u = 10;
int v = 20;
int * p = &u;
int * q = &v;
swap(*p, *q);
std::cout<<"u :-"<<u<<" v :-"<<v<<endl;
return 0;
}
u
和 v
的值被交换了。在这里,我传递的是指针值而不是引用,但是值被交换了,如何?
可以在以下位置找到确切的代码: https://ideone.com/kMJHL6
我认为你调用的是算法库的交换函数,而不是你的函数
swap(*p, *q);
由于 *p
和 *q
的类型 而不是 int *
,(只是 int
)此代码 不会 调用您的 swap
函数。相反,它通过函数重载解析调用标准C++库中的函数std::swap
。
您的代码有 using namespace std;
- 您的案例是说明您不应该使用它的原因之一。