C++11. Как работает функция swap(a, b)? Я понимаю, что она меняет значение переменных, но почему в качестве аргументов принимает не адрес на переменную?
Функция swap(a, b) в C++11 принимает параметры по значению, а не по ссылке или указателю, потому что в новых стандартах C++ была внедрена возможность автоматической передачи аргументов по ссылке или rvalue reference.
Таким образом, при использовании функции swap(a, b) передаваемые ей значения a и b будут копироваться в параметры функции. Затем функция поменяет значения своих параметров местами, что приведет к изменению значений переменных a и b в теле функции.
Пример использования функции swap(a, b):
#include <iostream> void swap(int a, int b) { int temp = a; a = b; b = temp; } int main() { int x = 5, y = 10; std::cout << "Before swap: x = " << x << ", y = " << y << std::endl; swap(x, y); std::cout << "After swap: x = " << x << ", y = " << y << std::endl; return 0; }
В этом примере функция swap работает с копиями значений переменных x и y, поэтому изменения, произведенные внутри функции, не будут отражены на оригинальных переменных. Для того, чтобы функция могла менять оригинальные значения переменных a и b, нужно передавать их по ссылке или указателю.
Функция swap(a, b) в C++11 принимает параметры по значению, а не по ссылке или указателю, потому что в новых стандартах C++ была внедрена возможность автоматической передачи аргументов по ссылке или rvalue reference.
Таким образом, при использовании функции swap(a, b) передаваемые ей значения a и b будут копироваться в параметры функции. Затем функция поменяет значения своих параметров местами, что приведет к изменению значений переменных a и b в теле функции.
Пример использования функции swap(a, b):
#include <iostream>void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 5, y = 10;
std::cout << "Before swap: x = " << x << ", y = " << y << std::endl;
swap(x, y);
std::cout << "After swap: x = " << x << ", y = " << y << std::endl;
return 0;
}
В этом примере функция swap работает с копиями значений переменных x и y, поэтому изменения, произведенные внутри функции, не будут отражены на оригинальных переменных. Для того, чтобы функция могла менять оригинальные значения переменных a и b, нужно передавать их по ссылке или указателю.