Eine einfache Frage zu Art Zwang in C ++
Frage
ein Funktionsprototyp gegeben und eine Typdefinition:
int my_function(unsigned short x);
typedef unsigned short blatherskite;
Ist die folgende Situation durch Standard definiert:
int main(int argc, char** argv) {
int result;
blatherskite b;
b=3;
result = my_function(b);
}
Do I Art Zwang vorhersagbar über die Funktion Prototyp bekommen?
Lösung
Wenn Ihre Frage ist wirklich, ob die Art des Arguments und der Parameter übereinstimmen, dann ist die Antwort ja. typedef
führt keine neue Art, schafft es nur Alias ??für einen vorhandenen. Variable b
hat Typen unsigned int
, genau wie die Parameter, obwohl b
deklariert ist typedef-name blatherskite
.
Ihr Beispiel ist nicht sehr gut für dass, obwohl zu demonstrieren. Alle ganzzahligen Typen sind wandelbar miteinander in C ++, so (Bereich Probleme zu ignorieren) würde der Code Verhalten definiert haben, auch wenn blatherskite
einen anderen Typ bezeichnet (ein neuer Typ). Aber es funktioniert nicht. Das ist also auch perfekt gültig
void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
Andere Tipps
Zwang Kein Typ erforderlich ist. Der typedef ist nur ein Alias ??für den gleichen Typ, so dass Sie einen unsigned short
auf eine Funktion, vorbei sind, die eine unsigned short
nimmt.