这个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;,因为如果您不喜欢您创建的函数,它会在更大的项目中出现问题(冲突)。