


Ist „Timer()' ein Konstruktoraufruf oder ein Funktionsaufruf? Die „Most Vexing Parse'-Mehrdeutigkeit in C
Nov 02, 2024 pm 01:25 PMDie „ärgerlichste Parse“-Mehrdeutigkeit: Einheitliche Initialisierer enträtseln
Im Bereich von C kann die „ärgerlichste Parse“-Mehrdeutigkeit auftreten wenn auf einheitliche Initialisierer gestoßen wird, wie durch den folgenden Code veranschaulicht:
1 2 3 4 5 6 7 8 9 10 |
|
Interpretation von dv
In der Zeile auto dv = Timer(); der Typ von dv hängt von der Interpretation von Timer() ab. Dies kann entweder sein:
- Ein Konstruktoraufruf, der ein Objekt vom Typ Timer instanziiert.
- Ein Funktionsaufruf für eine hypothetische Operator()-Überladung in Timer, da eine einheitliche Initialisierung verwendet werden kann um Funktionsaufrufe aufzurufen.
In diesem Fall bedeutet es einen Konstruktoraufruf, was dazu führt, dass dv ein Objekt vom Typ Timer ist. Das Schlüsselwort auto leitet den Typ basierend auf dem Initialisierer ab.
Time_keeper verstehen
In der Zeile int time_keeper(Timer()); wird eine Funktion namens time_keeper deklariert. Das Argument ist kein Funktionszeiger vom Typ Timer (*) (), wie man erwarten könnte. Es stellt vielmehr einen Zeiger auf eine Funktion dar, die einen Timer zurückgibt und keine Argumente akzeptiert. Dies liegt daran, dass:
- Funktionen implizit in einen Zeiger auf eine Funktion zerfallen, wenn sie als Argumente übergeben werden.
- In diesem speziellen Fall zerfällt der Funktionsaufruf in einen Zeiger auf eine Funktion, die a zurückgibt Timer und akzeptiert keine Argumente, d. h. Timer(*)().
Fazit
Die Mehrdeutigkeit der „ärgerlichsten Analyse“ unterstreicht das Potenzial für Verwirrung bei der Interpretation bestimmter Konstrukte in C . Das Verständnis des Konzepts der einheitlichen Initialisierung und des Funktionsabfalls ist entscheidend, um solche Szenarien richtig zu verstehen.
Das obige ist der detaillierte Inhalt vonIst „Timer()' ein Konstruktoraufruf oder ein Funktionsaufruf? Die „Most Vexing Parse'-Mehrdeutigkeit in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
