我讀的地方(找不到現在源)爲什麼`拋出MyClass'不起作用,拋出MyClass()'呢?
MyClass *p1 = new MyClass;
和
MyClass *p2 = new MyClass();
基本上是相等的,前提是MyClass
提供一個默認的構造函數。編譯器明白我想要做什麼並添加空括號。
如果是這樣的話,爲什麼不讓我寫
throw MyException;
,但必須使用
throw MyException();
? (是的,在一行的開頭問號。)
多補充一些混亂,C++ FAQ表明,第二用例(new MyClass()
)不會調用構造函數,但要求與operator()
,而不是定義的函數。
C++中一個有趣的怪癖:你不能擁有值初始化的自動對象,並且你不能擁有默認初始化的臨時對象。 –