Bonjour,
Il y a un truc qui me semble curieux, et j'ai écrit un tout petit programme minimal pour reproduire le phénomène:
D'abord, voyons le cas que je considère "normal":
Comme vous le voyez, la fonction f2 accepte comme paramètre un unsigned int, mais dans le code de f1, je lui passe un signed int.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void f2(unsigned int& output) { output = 5; } signed int f1() { signed int x; f2(x); return x; } int main (void) { signed int y = f1(); return 0; }
Comme prévu: erreur de compilation:
Par conséquent, dans le code de f1, je déclare ma variable x unsigned int plutot que signed int:error C2664: f2: cannot convert parameter 1 from 'int' to 'unsigned int &'
Et c'est la que ça me pose un problème: car cette fois ça compile sans problème. Pourtant la fonction f1 est supposée retourner un signed int, et elle retourne un unsigned int cette-fois...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void f2(unsigned int& output) { output = 5; } signed int f1() { unsigned int x; // la ligne qui a changé f2(x); return x; } int main (void) { signed int y = f1(); return 0; }
Donc ma question:
Pourquoi le compilo refuse de caster inplicitement signed->unsigned, mais accepte de caster implicitement unsigned->signed?
Partager