没有先声明函数,我可以交换变量的值吗?

3
#include <iostream>

using namespace std;

void swap(int, int);

int main()
{
    int a=10;
    int b=20;

    swap (a, b);

    cout << "a: " << a << endl;
    cout << "b: " << b << endl;

    return 0;
}

void swap(int x, int y)
{
    int t;
    t = x;
    x = y;
    y = t;
}

以上代码无法交换a和b的值。 但是我的问题是,当我忘记输入第三行“void swap(int, int);”时,a和b的值却被交换了!! 为什么?

3个回答

7

这是因为您拥有

using namespace std;

在你的源代码开头。

这是一种不好的编程实践,你刚刚亲身经历了它的后果。你告诉编译器你想调用std::swap,但你并不知道自己实际上正在做什么。

这很讽刺,因为你的swap()版本不会正确工作,但是std::swap会;所以你在错误的印象下运行你的代码,当然也就不能正常工作。

永远不要在你的代码中使用"using namespace std;"。最好忘记C++语言的这个部分曾经存在过。


如果函数原型在函数声明之前编写,它会起到什么作用?这有什么区别吗? - isharailanga

0
#include <iostream>

using namespace std;


int main()
{
    int a = 10;
    int b = 20;
    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
    system("pause");
    swap(a, b);

    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
    system("pause");
    return 0;
}

void swap 是不必要的


-1
如果你把函数定义放在main函数之前,那么你就不需要原型,否则你需要它,如果没有原型,编译器应该会给出一个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接