Как этот код C ++ работает без определения функции - PullRequest
1 голос
/ 18 февраля 2020

Может кто-нибудь объяснить логику c за работой определенной функции в этой программе. Это дает правильный вывод в этом случае даже после комментирования всей логики c функции.

#include <iostream>
using namespace std;
void swap(int *a, int *b)
{ /*
int temp=0;
 temp= *a;
 *a= *b;
 *b=temp;
*/
}
int main()
{
    int x, y;
    cout << "This program is the demo of function call by pointer \n\n";
    cout << "Enter the value of x & y \n";
    cout << "x: ";
    cin >> x;
    cout << "y: ";
    cin >> y;
    cout << "Value befor swap " << endl;
    cout << "x= " << x << " y= " << y << endl;
    swap(x, y);
    cout << "Value after swap " << endl;
    cout << "x= " << x << " y= " << y << endl;
    return 0;
}

Ответы [ 3 ]

11 голосов
/ 18 февраля 2020

Вот почему вы не должны делать using namespace std;, это просто приводит к путанице, как это.

Что происходит, когда вместо этого вызывается std::swap когда вы делаете swap(x, y);.

Кстати, ваш своп не будет работать. Требуется int указателей, но вы даете это int. Это не скомпилируется, вам нужно вместо этого сделать swap(&x, &y);. Он работал только потому, что всегда использовал std::swap.

5 голосов
/ 18 февраля 2020

swap является неоднозначным между вашим определением и std::swap. Если вы хотите сохранить using namespace std, вам нужно инкапсулировать объявление метода в классе или пространстве имен и вызывать YourNamespaceOrClass::swap(a, b) явно

2 голосов
/ 18 февраля 2020

Объявление using namespace std; означает, что вы используете все функции внутри namespace std. Теперь в вашем коде есть собственная версия функции swap, которая void swap(int *a, int *b).

Программа работала нормально по совпадению, потому что namespace std имеет предопределенную функцию swap () , которая принимает целые числа. Без этого ваша программа не будет работать, так как созданная функция получает указатель. Это означает, что вам нужно передать адрес переменной swap(&var1, &var2).

Это называется Перегрузка функций . Он находит правильную функцию, которая подходит на основе параметров.

Подсказка: Избегайте использования using namespace std;, так как это приведет к проблемам (столкновениям) в больших проектах, если вы не заинтересованы в созданных вами функциях.

...