Betrachten Sie dieses Programm:Warum ist die Funktionsüberladung, die einen int bevorzugt gegenüber dem einen vorzeichenlosen Zeichen nimmt?
#include <iostream>
using namespace std;
void f(unsigned char c) {
cout << c << endl;
}
void f(int c) {
cout << c << endl;
}
int main() {
f('a');
}
Dies druckt 97
aus, was darauf hindeutet, dass die f()
Überlastung, dass derjenige ausgewählt wurde, war ein int
nehmen. Ich finde das komisch; würde nicht intuitiv eine unsigned char
eine bessere Übereinstimmung für eine char
sein?
es ist, weil auf Ihrem Compiler char == signiert Char – Sopel
Ich kann kein richtiges Duplikat finden, aber es gibt wahrscheinlich einen. Was Sie suchen ist, wie Konvertierungssequenzen gehandhabt werden. –
Dies ist ähnlich und sollte dazu beitragen, die Dinge zu erklären. https://stackoverflow.com/questions/37166131/why-does-the-compiler-match-char-to-int-but-not-short –