J'apprends C++ et vient de trouver quelque chose d'étrange que je voudrais comprendre (voir le commentaire sur la 5ème ligne du code):La déclenchement vers l'avant modifie le comportement de la fonction?
#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;
}
Quelqu'un peut-il expliquer ce comportement s'il vous plaît? Je pensais que, par défaut C++ passe par valeur à moins que vous utilisez le amperstand (&) devant le paramètre de fonction comme ceci:
function swap(int &a, int &b) {
Et si vous supprimez à la fois la directive using et la directive using, elle échoue à se compiler, comme vous vous en doutez. – chris
@chris Pas vraiment, il y a 'std :: swap' qui implémente le bon swap (contrairement au sien). – 0x499602D2
@ 0x499602D2, Oui, je sais. [Voici ce que je veux dire] (http://coliru.stacked-crooked.com/a/e5f34aaf54dfd956). – chris