Comment puis-je éviter les conversions implicites sur la non-construction de fonctions?

Comment puis-je éviter la conversion implicite sur la non-construction de fonctions?

J'ai une fonction qui prend un entier en paramètre,

mais cette fonction prendra également des caractères, booléens, et qu'il désire.

Je crois qu'il le fait par implicitement casting eux.

Comment puis-je éviter cela, de sorte que la fonction accepte uniquement les paramètres d'un même type, et refusera de compiler autrement?

Il y a un mot-clé "explicite", mais il ne fonctionne pas sur la non-construction de fonctions. :\

que dois-je faire?

Le programme suivant compile, mais j'aimerais ne pas:

#include <cstdlib>

//the function signature requires an int
void function(int i);

int main(){

    int i{5};
    function(i); //<- this is acceptable

    char c{'a'};
    function(c); //<- I would NOT like this to compile

    return EXIT_SUCCESS;
}

void function(int i){return;}

*s'il vous plaît assurez-vous de signaler toute utilisation abusive de la terminologie et des hypothèses

  • par la manière, la capacité de passer d'un char, long, bool, ou n'importe quel autre type entier où un int est prévu, c'est parce que de l'entier de la promotion et des règles de conversion qui sont intégrés dans la langue. Ce mécanisme est différent que les conversions implicites de non-explicite des constructeurs.
  • +1 pour la question sans vraiment de bonnes solutions encore!