不定义函数的情况下如何运行此c ++代码

时间:2020-02-18 07:48:37

标签: c++ std swap

任何人都可以解释该程序中定义的功能工作背后的逻辑。即使在注释了函数的整个逻辑之后,在这种情况下,也可以提供正确的输出。

#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;
}

3 个答案:

答案 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;,因为如果您不希望创建的函数,在较大的项目中会遇到问题(冲突)。