Czy jest jakaś różnica między `List x;` a `List x ()`

Tytuł pochodzi ze słynnej stronyC ++ FAQ przez Marshall Cline.

Autor twierdzi, że istnieje różnica między dwoma poniższymi przykładami kodu.

Załóżmy, że lista jest nazwą jakiejś klasy. Następnie funkcja f () deklaruje obiekt listy lokalnej o nazwie x:

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

Ale funkcja g () deklaruje funkcję o nazwie x (), która zwraca listę:

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

Ale czy naprawdę jest źle używać drugiego wariantu?

A jeśli to naprawdę jest deklaracja, to czy kompilator nie narzeka, że ​​nie można zadeklarować funkcji w funkcji?

questionAnswers(1)

yourAnswerToTheQuestion