2 つのポインターを受け取る swap 関数が、名前空間 std を使用する場合にのみ機能するのはなぜですか? 質問する

2 つのポインターを受け取る swap 関数が、名前空間 std を使用する場合にのみ機能するのはなぜですか? 質問する

次のようなコードがたくさんあります:

#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に関するエラーを発生させます。 演算子で メソッドを使用していないのに、コードが で機能するのはなぜですか?intint*using namespace std&

ベストアンサー1

最初の例では、std::swapのため、 が呼び出されますusing namespace std。 2 番目の例は最初の例とまったく同じなので、 を使用する必要がない可能性があります。

とにかく、関数の名前を またはmy_swapそれに似た名前に変更すると (すべての出現箇所を変更すると)、最初のコードは期待どおりに動作しなくなります。または、 を削除しておよびを明示的にusing namespace std呼び出します。2 番目のオプションをお勧めします。std::cinstd::cout

おすすめ記事