为什么在声明使用命名空间std时将int用作指针参数传递给函数?

时间:2019-05-22 04:37:20

标签: c++ pointers std swap

我搞砸了一个使用指针交换两个变量的值的函数,并且发现通过声明using namespace std,我不需要将变量的地址作为参数传递就可以使用。传递int本身会使代码正常工作。

我怀疑这与std如何处理参数有关,但是我找不到答案。如果有人能指出我正确的方向,我将不胜感激。

1)没有using namespace std

#include<iostream>
void swap(int* X, int* Y);
int main() {
    int a, b;
    std::cin >> a;
    std::cin >> b;
    std::cout << a << "," << b << std::endl;
    swap(&a, &b);
    std::cout << a << "," << b << std::endl;
}
void swap(int* X, int* Y) {
    int temp = *X;
    *X = *Y;
    *Y = temp;
}

2)使用using namespace std

#include<iostream>
**using namespace std;**
void swap(int* X, int* Y);
int main() {
    int a, b;
    std::cin >> a;
    std::cin >> b;
    std::cout << a << "," << b << std::endl;
    swap(a, b);
    std::cout << a << "," << b << std::endl;
}
void swap(int* X, int* Y) {
    int temp = *X;
    *X = *Y;
    *Y = temp;
}

1 个答案:

答案 0 :(得分:6)

不是。使用using namespace std;,您最终可以调用std::swap,该参数通过引用获取其参数。这是using namespace std是非常不好的做法的众多原因之一。