Heim >Backend-Entwicklung >C++ >Erlaubt das Überladen von C-Funktionen Unterschiede nur im Rückgabetyp?

Erlaubt das Überladen von C-Funktionen Unterschiede nur im Rückgabetyp?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 19:21:15919Durchsuche

Does C   Function Overloading Allow Differences Only in Return Type?

Ist der Rückgabetyp in der Funktionssignatur enthalten und erlaubt er ein Überladen nur mit Änderungen des Rückgabetyps?

In C gibt es einen Unterschied zwischen Funktionsdeklarationen und Funktionsentitäten. Deklarationen können Funktionsentitäten oder Vorlagenentitäten erstellen. Bei Funktionsdeklarationen, die keine Vorlagen sind, umfasst die Signatur die Argumenttypen, Informationen zur Klassenmitgliedschaft (falls zutreffend) und Qualifizierer. Bei Funktionsvorlagenspezialisierungen umfasst die Signatur jedoch auch den Rückgabetyp.

Funktionssignatur für Funktionsspezialisierungen

Standard C schreibt vor, dass die Signatur bei Funktionsvorlagenspezialisierungen Folgendes umfasst der Rückgabetyp, wie in Abschnitt 14.5.5.1 hervorgehoben. Dies umfasst die Signatur der Vorlage und die bereitgestellten Vorlagenargumente. Dies steht im Einklang mit dem Verständnis, dass der Rückgabetyp zum Typ einer Funktion beiträgt.

Überladung mit differenzierten Rückgabetypen

Gemäß dem Standard sind Funktionsdeklarationen mit Unterschiedliche Rückgabetypen gelten im Hinblick auf die Überladung als unterschiedlich (Abschnitt 13.1). Die Definition von „unterscheidet sich nur durch den Rückgabetyp“ bleibt jedoch in der Sprache nicht spezifiziert.

Compilerverhalten

Derzeit lehnen große Compiler Funktionsdeklarationen mit identischen, aber unterschiedlichen Signaturen ab Rückgabetypen (z. B. „int f();“, „double f();“). Dieses Verhalten ist jedoch möglicherweise nicht unbedingt vom Standard vorgeschrieben.

C 0x Draft Proposal

Neueste C 0x Draft-Spezifikationen bieten eine umfassendere Definition von „Signatur“ in Abschnitt 1.3.11, der explizit den Rückgabetyp sowohl für Funktionsentitäten als auch für Vorlagenspezialisierungen einschließt. Dies deckt sich mit der Behauptung, dass der Rückgabetyp einen integralen Bestandteil des Funktionstyps bildet.

Daher gilt zusammenfassend:

  • Funktionsspezialisierungen beziehen den Rückgabetyp in ihre Signaturen ein.
  • Nicht-Template-Funktionen haben den Rückgabetyp nicht in ihren Signaturen.
  • Überladung mit nur Rückgabetypunterschieden ist möglich basierend auf dem Standard verboten, obwohl die genaue Interpretation dieser Bedingung je nach Compiler und Sprachversion variieren kann.

Das obige ist der detaillierte Inhalt vonErlaubt das Überladen von C-Funktionen Unterschiede nur im Rückgabetyp?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn