为什么采用两个指针的交换函数只能与 using 命名空间 std 一起使用?

问题描述 投票:0回答:1

我有一堆这样的代码:

#include <iostream>
using namespace std;

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

int main() {
    int a = 7;
    int b = 5;
    swap(a, b);
    cout << a << b; // prints 57 as expected
}

但是,如果我删除

using namespace std
,编译器会引发有关
int
int*
转换的错误。为什么代码可以与
using namespace std
一起使用,即使我没有使用带有
&
运算符的方法?

c++ pointers reference
1个回答
71
投票

在第一个示例中,由于您的

std::swap
,因此调用
using namespace std
。 第二个示例与第一个示例完全相同,因此您可能无法使用。

无论如何,如果您将函数重命名为

my_swap
或类似的名称(并更改每次出现的情况),那么第一个代码不应该按预期工作。或者,删除
using namespace std
并显式调用
std::cin
std::cout
。我会推荐第二种选择。

© www.soinside.com 2019 - 2024. All rights reserved.