class F { public: F() {} F(int) {} void f() {} }; void test() { F f1; F f2(); f1.f(); //可以正常執行 f2.f(); //會報錯,因為編譯認為F f2();是定義了一個返回值為F類型的函數,f2並不是F的對象,也無f()方法。 }
關於 new F() 和 new F 的區別。
class F { public: int a; int b; }; void test() { F *f1 = new F; F *f2 = new F(); cout << f1->a << endl; //此時輸出值為不確定的,根據內存狀態而定 cout << f2->a << endl; //此時是輸出0; // 這是因為當F時PoD類型時,其成員變量會初始化; // POD類型是指一個類或對象,其成員是原生數值類型(int, unsigned char, float, bool等等) // 或者另外一個POD類型。POD對象看起來像C語言風格的結構對象 }