Heim Backend-Entwicklung C++ Ist „Timer()' ein Konstruktoraufruf oder ein Funktionsaufruf? Die „Most Vexing Parse'-Mehrdeutigkeit in C

Ist „Timer()' ein Konstruktoraufruf oder ein Funktionsaufruf? Die „Most Vexing Parse'-Mehrdeutigkeit in C

Nov 02, 2024 pm 01:25 PM

Is `Timer()` a Constructor Call or a Function Call? The

Die „ä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

<code class="cpp">class Timer {

public:

    Timer() {}

};

 

int main() {

    auto dv = Timer(); // What is Timer() ? And what type is dv?

    int time_keeper(Timer()); // This is a function right? And why isn't the argument "Timer (*) ()"?

    return 0;

}</code>

Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

See all articles