Путаница о указателях и ссылках в С++
У меня есть куча кода вроде этого:
#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;
Компилятор дает мне ошибку о целочисленной ошибке * integer, которая как и ожидалось. Почему первый код выполняет правильную замену, хотя я не использовал метод с оператором &
?
Ответы
Ответ 1
В первом примере вызывается std::swap
из-за вашего using namespace std
.
Второй пример точно такой же, как и первый, поэтому вы, возможно, не используете.
В любом случае, если вы переименуете свою функцию на my_swap
или что-то в этом роде (и измените каждое ее появление), то первый код не должен работать, как и ожидалось. Или удалите using namespace std
и вызовите std::cin
и std::cout
явно. Я бы порекомендовал второй вариант.