#include template <char c> struct Func { static const int member = 0; }; template <> struct Func<'A'> { static const int member = 3; }; template <> struct Func<'E'> { static const int member = 4; }; template <> struct Func<'C'> { static const int member = 9; }; template <> struct Func<'K'> { static const int member = 10; }; template <> struct Func<'L'> { static const int member = 40; }; int main(void) { std::cout << "Q = " << Func<'Q'>::member << std::endl; std::cout << "A = " << Func<'A'>::member << std::endl; std::cout << "E = " << Func<'E'>::member << std::endl; std::cout << "C = " << Func<'C'>::member << std::endl; std::cout << "K = " << Func<'K'>::member << std::endl; std::cout << "L = " << Func<'L'>::member << std::endl; return 0; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include int fonction(char* a) { return ((!!!(*a ^ 0b1000001)) * 3) + ((!!!(*a ^ 0b1000101)) * 4) + ((!!!(*a ^ 0b1000011)) * 9) + ((!!!(*a ^ 0b1001011)) * 10) + ((!!!(*a ^ 0b1001100)) * 40); } int main() { std::cout << "Q " << fonction("Q") << std::endl; std::cout << "A " << fonction("A") << std::endl; std::cout << "E " << fonction("E") << std::endl; std::cout << "C " << fonction("C") << std::endl; std::cout << "K " << fonction("K") << std::endl; std::cout << "L " << fonction("L") << std::endl; return 0; }
#include int fonction(char* a) { return (!(*a ^ 'A') * 3) + (!(*a ^ 'E') * 4) + (!(*a ^ 'C') * 9) + (!(*a ^ 'K') * 10) + (!(*a ^ 'L') * 40); } int main() { std::cout << "Q " << fonction("Q") << std::endl; std::cout << "A " << fonction("A") << std::endl; std::cout << "E " << fonction("E") << std::endl; std::cout << "C " << fonction("C") << std::endl; std::cout << "K " << fonction("K") << std::endl; std::cout << "L " << fonction("L") << std::endl; return 0; }
Tout ce qui amènera vers le 'return valeur' depuis l'entrée de la fonction fait partie de l'algo, le 'switch case' y compris. On est ensuite dépendant de la qualité de l'optimiseur du compilo.
Dans tous les cas, switch case se résumera au maxi à 5 CMP et 1 seul JMP (le vilain goto), imbattable ici.
Avec une macro
ou mieux avec de l'assembleur inline ça serait fait à mach2.