24

我有一堆这样的代码:

#include <iostream>
using namespace std;

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a;
    int b;
    a = 7;
    b = 5;
    swap(a, b);
    cout << a << b;

    return 0;
}

这段代码执行交换过程,就像我想要交换 2 个数字一样,但是当我想要来自用户的两个数字时,如下所示;

int a;
int b;
cin >> a;
cin >> b;
swap(a, b);
cout << a << b;

编译器给了我一个关于错误intint*错误,这是预期的。尽管我没有使用带有运算符的方法,为什么第一个代码会进行正确的交换&

4

1 回答 1

65

在第一个示例std::swap中,由于您的using namespace std. 第二个示例与第一个示例完全相同,因此您可能没有使用。

无论如何,如果您将函数重命名为my_swap或类似的名称(并更改每一次出现),那么第一个代码不应该像预期的那样工作。或者,明确删除using namespace stdand 调用std::cinand 。std::cout我会推荐第二种选择。

于 2012-11-15T17:21:22.037 回答