En C#, vous pouvez définir un nombre littéral comme int ou double.
Double var1 = 56.1;
int var2 = 51;
Ce sont les types par défaut qui sont attribués aux littéraux. Toutefois, le moteur de jeu sur lequel je travaille utilise des flottants pour la position, la rotation, etc. Lorsque l'on attribue au flottant un double littéral, par ex, float varFloat = 75.4;
le compilateur génère une erreur en disant que le double littéral doit être un flottant, ce qui est correct. Il faut donc transformer le double littéral en un flottant. float varFloat = 75.4f;
. Cependant, lorsqu'on lui donne un littéral int, celui-ci est implicitement converti en flottant. Par exemple,
float varFloat = 44; // This is fine.
Ma question est la suivante : le compilateur est-il assez intelligent pour réaliser que 44 devrait être un littéral de type float ? Si ce n'est pas le cas, cela signifie qu'à chaque fois que l'on accède à ce littéral, on effectue également une conversion. Dans la plupart des cas, cela n'a pas vraiment d'importance. Mais avec un code à haute performance, cela pourrait potentiellement devenir un problème (même s'il est mineur) si les ints sont utilisés partout au lieu des flottants. Pour autant que je sache, il n'y a aucun moyen de changer ces littéraux en flottants sans passer par des lignes de code source, ce qui n'est vraiment pas du temps bien dépensé.
Alors, le compilateur convertit-il le littéral int en littéral float ? Si ce n'est pas le cas, que peut-on faire pour éviter ce gaspillage de puissance de traitement, à part essayer de l'éviter ?