Heim >Backend-Entwicklung >C++ >Enthält die C-Funktionssignatur den Rückgabetyp?
Beeinflusst der Rückgabetyp die Funktionssignatur?
In C schließen Funktionen, die ohne Funktionsvorlagen deklariert werden, ihren Rückgabetyp in ihren Signaturen aus. Das Überladen von Funktionen, die ausschließlich auf unterschiedlichen Rückgabetypen basieren, ist verboten.
Detaillierte Erläuterung
Die Beziehung zwischen Funktionen, ihren Deklarationen und Signaturen ist komplex.
Deklaration und Entität
Eine Funktionsdeklaration kann eine Funktionsentität oder eine Vorlage deklarieren juristische Person. Zur ersten Kategorie gehören gewöhnliche Funktionen und explizite Spezialisierungen von Funktionsvorlagen. Primäre Funktionsvorlagen oder explizite Spezialisierungen mit nicht spezifizierten Argumenten fallen in die letztere Kategorie.
Signaturdefinition
Gemäß dem C-Standard (1.3.10) umfasst die Funktionssignatur Folgendes:
In dieser Definition fehlt jedoch die Erwähnung des Rückgabetyps.
Funktionsvorlagen und Rückgabetypen
Im Gegensatz dazu umfasst die Signatur einer Funktionsvorlagenspezialisierung sowohl die Funktionssignatur als auch den Rückgabetyp (14.5.5.1).
Was genau macht eine Signatur aus?
Bei Nicht-Vorlagenfunktionen schließt die Signatur den Rückgabetyp aus. Bei Vorlagenspezialisierungen ist jedoch der Rückgabetyp integriert.
Auswirkungen auf Überladung
Der Standard verbietet Überladungen, die ausschließlich auf unterschiedlichen Rückgabetypen basieren. Es bleibt jedoch unklar, was eine solche Unterscheidung ausmacht.
Compiler-Verhalten
Große Compiler lehnen den folgenden Code aufgrund inkompatibler Typen ab:
int f(); double f(); // invalid
Allerdings akzeptieren:
template<typename T> int f(); template<typename T> double f(); // invalid?
Fazit
Der Rückgabetyp ist zwar nicht Teil der Signatur für Nicht-Vorlagenfunktionen, aber entscheidend für die Bestimmung der Funktionstypkompatibilität. Das Verständnis dieser Nuancen ist für eine effektive C-Programmierung unerlässlich.
Das obige ist der detaillierte Inhalt vonEnthält die C-Funktionssignatur den Rückgabetyp?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!