C ++ 11 Unterschied in Konstruktoren (geschweifte Klammern)

Ich bin ziemlich neu in C ++ und habe festgestellt, dass die folgenden Codezeilen anders funktionieren

MyClass c1;
c1.do_work() //works
MyClass c2();
c2.do_work() //compiler error c2228: left side is not a class, structure, or union.
MyClass c3{};
c3.do_work() //works

mit einer Header-Datei als

class MyClass {
public:
    MyClass();
    void do_work();
};

Können Sie mir erklären, worin der Unterschied zwischen den drei Arten der Objekterstellung besteht? Und warum führt der zweite Weg zu einem Compilerfehler?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage