Gibt es einen Unterschied zwischen `List x;` und `List x ()`?

Der Titel stammt von der berühmten StätteC ++ FAQ von Marshall Cline.

Der Autor behauptet, dass es einen Unterschied zwischen den folgenden beiden Codebeispielen gibt.

Angenommen, List ist der Name einer Klasse. Dann deklariert die Funktion f () ein lokales List-Objekt mit dem Namen x:

void f()
{
    List x;     // Local object named x (of class List)
    ...
}

Die Funktion g () deklariert jedoch eine Funktion mit dem Namen x (), die eine Liste zurückgibt:

void g()
{
    List x();   // Function named x (that returns a List)
    ...
}

Aber ist es wirklich falsch, die zweite Variante zu verwenden?

Und wenn es sich wirklich um eine Deklaration handelt, würde sich der Compiler dann nicht darüber beschweren, dass Sie eine Funktion innerhalb einer Funktion nicht deklarieren können?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage