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つの番号を交換したかったのと同じように交換プロセスを実行しますが、ユーザーから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。2番目の例は最初の例とまったく同じであるため、使用しない場合があります。

とにかく、関数の名前をmy_swapそのようなものに変更した場合(そして発生するたびに変更した場合)、最初のコードは期待どおりに機能しないはずです。または、andを削除して明示的using namespace stdに呼び出します。2番目のオプションをお勧めします。std::cinstd::cout

于 2012-11-15T17:21:22.037 に答える