Wie kann ich vermeiden, implizite Konvertierungen auf nicht-Bau-Funktionen?

Wie kann ich vermeiden, dass die implizite Typumwandlung, die auf nicht-Bau-Funktionen?

Ich habe eine Funktion, die einen integer als parameter

aber wird diese Funktion auch Zeichen, bools, und sehnt sich danach.

Ich glaube, es tut dies, indem er implizit Gießen Sie.

Wie kann ich dies vermeiden, so dass die Funktion akzeptiert nur Parameter des entsprechenden Typs, und wird sich weigern zu kompilieren sonst?

Es ist ein Schlüsselwort "explicit", aber es funktioniert nicht auf nicht-Bau-Funktionen. :\

was kann ich tun?

Folgende Programm kompiliert, obwohl ich es gern, nicht zu:

#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;}

*bitte achten Sie auf jegliche missbräuchliche Verwendung der Terminologie und Annahmen

  • by the way, die Fähigkeit zu übergeben, char, long, bool, oder im Grunde jedem anderen integer-Typ, wo ein int erwartet wird ist, weil der integer-promotion und conversion-Regeln in der Sprache. Dies ist ein anderer Mechanismus als die implizite Konvertierung geschieht mit nicht-explizite Konstruktoren.
  • +1 für die Frage keine wirklich gute, Allgemeine Lösungen noch nicht!
Schreibe einen Kommentar