任何人都可以解释该程序中定义的功能工作背后的逻辑。即使在注释了函数的整个逻辑之后,在这种情况下,也可以提供正确的输出。
#include <iostream>
using namespace std;
void swap(int *a, int *b)
{ /*
int temp=0;
temp= *a;
*a= *b;
*b=temp;
*/
}
int main()
{
int x, y;
cout << "This program is the demo of function call by pointer \n\n";
cout << "Enter the value of x & y \n";
cout << "x: ";
cin >> x;
cout << "y: ";
cin >> y;
cout << "Value befor swap " << endl;
cout << "x= " << x << " y= " << y << endl;
swap(x, y);
cout << "Value after swap " << endl;
cout << "x= " << x << " y= " << y << endl;
return 0;
}
答案 0 :(得分:11)
这就是您shouldn't do using namespace std;
的原因,它只会导致这样的混乱。
发生的事情是,当您执行swap(x, y);
时会调用std::swap
。
顺便说一句,您的交换无效。它需要int
个指针,但您却给它int
。这不会编译,您需要执行swap(&x, &y);
。之所以起作用,是因为它一直使用std::swap
。
答案 1 :(得分:5)
swap
在您的定义和std::swap
之间是不明确的。
如果要保留using namespace std
,则需要将方法声明封装在类或命名空间中,并显式调用YourNamespaceOrClass::swap(a, b)
答案 2 :(得分:2)
声明using namespace std;
意味着您正在使用namespace std
内部的所有功能。现在,在您的代码中,您拥有自己的swap
函数版本,即void swap(int *a, int *b)
。
该程序可以同时运行,因为namespace std
具有预定义的 swap()函数,该函数可以接受整数。否则,您的程序将无法工作,因为您创建的函数需要一个指针。这意味着,您需要传递变量swap(&var1, &var2)
的地址。
这称为函数重载。它会根据参数找到适合的正确函数。
提示:避免使用using namespace std;
,因为如果您不希望创建的函数,在较大的项目中会遇到问题(冲突)。