Surcharge et conversions implicites
Lorsqu’un appel de fonction ne correspond pas exactement à une signature, le compilateur C++ effectue des conversions implicites pour tenter de trouver une correspondance. Ce mécanisme est au coeur de la résolution de surcharge (overload resolution).
Les 3 rangs de conversion #
Le compilateur C++ classe les conversions implicites en 3 rangs, du plus prioritaire au moins prioritaire :
| Rang | Nom | Exemples |
|---|---|---|
| 1 | Exact match | Aucune conversion, ajout de const, lvalue-to-rvalue |
| 2 | Promotion | float → double, short → int, char → int |
| 3 | Conversion | double → int, double → float, int → float |
Exemple concret #
Considérons deux surcharges :
...