这个c ++代码如何在没有函数定义的情况下运行
How this c++ code runs without definition of function
谁能解释一下这个程序中定义函数的工作逻辑。在这种情况下,即使在注释了整个函数逻辑之后,这也会给出正确的输出。
#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;
}
这就是你 shouldn't do using namespace std;
的原因,它只会导致这样的混乱。
当您执行 swap(x, y);
时,会调用 std::swap
。
顺便说一下,您的交换将不起作用。它需要 int
个指针,但你给它 int
。这不会编译,您需要改为 swap(&x, &y);
。它之所以有效,是因为它始终使用 std::swap
.
swap
在您的定义和 std::swap
之间有歧义。
如果要保留 using namespace std
,则需要将方法声明封装在 class 或命名空间中,并显式调用 YourNamespaceOrClass::swap(a, b)
声明 using namespace std;
意味着您正在使用 namespace std
中的所有函数。现在,在您的代码中,您有自己的 swap
函数版本,即 void swap(int *a, int *b)
。
巧合的是,该程序运行良好,因为 namespace std
具有接受整数的 swap() 预定义函数。没有这个,你的程序将无法运行,因为你创建的函数需要一个指针。也就是说,你需要传递变量的地址swap(&var1, &var2)
。
这称为函数重载。它根据参数找到适合的正确函数。
提示: 避免使用 using namespace std;
,因为如果您不喜欢您创建的函数,它会在更大的项目中出现问题(冲突)。
谁能解释一下这个程序中定义函数的工作逻辑。在这种情况下,即使在注释了整个函数逻辑之后,这也会给出正确的输出。
#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;
}
这就是你 shouldn't do using namespace std;
的原因,它只会导致这样的混乱。
当您执行 swap(x, y);
时,会调用 std::swap
。
顺便说一下,您的交换将不起作用。它需要 int
个指针,但你给它 int
。这不会编译,您需要改为 swap(&x, &y);
。它之所以有效,是因为它始终使用 std::swap
.
swap
在您的定义和 std::swap
之间有歧义。
如果要保留 using namespace std
,则需要将方法声明封装在 class 或命名空间中,并显式调用 YourNamespaceOrClass::swap(a, b)
声明 using namespace std;
意味着您正在使用 namespace std
中的所有函数。现在,在您的代码中,您有自己的 swap
函数版本,即 void swap(int *a, int *b)
。
巧合的是,该程序运行良好,因为 namespace std
具有接受整数的 swap() 预定义函数。没有这个,你的程序将无法运行,因为你创建的函数需要一个指针。也就是说,你需要传递变量的地址swap(&var1, &var2)
。
这称为函数重载。它根据参数找到适合的正确函数。
提示: 避免使用 using namespace std;
,因为如果您不喜欢您创建的函数,它会在更大的项目中出现问题(冲突)。