Я учусь C++ и только что-то странное, что я хотел бы понять (см комментарий на 5-й строке кода):Вперед.
#include <iostream>
using namespace std;
// WITH this forward decleration the output is A=1 and B=2
// WITHOUT this forward decleration the output is A=2 and B=1
// WHY??
void swap(int a, int b);
int main() {
int a = 1;
int b = 2;
swap(a, b);
cout << "A: " << a << endl;
cout << "B: " << b << endl;
system("PAUSE");
return 0;
}
void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}
Может кто-нибудь объяснить это поведение пожалуйста? Я думал, что по умолчанию C++ проходит по значению, если вы не используете amperstand (&) перед параметром функции, как это:
function swap(int &a, int &b) {
И если вы удалите как это, так и директиву использования, он не скомпилируется, как вы ожидали. – chris
@chris На самом деле нет 'std :: swap', который реализует правильный обмен (в отличие от его). – 0x499602D2
@ 0x499602D2, Да, я знаю. [Вот что я имею в виду] (http://coliru.stacked-crooked.com/a/e5f34aaf54dfd956). – chris