可能重复:
为什么使用空括号调用不带参数的构造函数是错误的?
我有一个非常简单的 C++ 类“A”,它的空构造函数在 main 中调用。唯一一个空的 c'tor 只是抛出一个异常SomeException。
#include <iostream>
using namespace std;
class SomeException : public exception { };
class A {
public:
A() {
throw SomeException();
}
};
int main() {
try {
//A a();
A a;
cout << "No exception." << endl;
}
catch (SomeException& se) {
cout << "Caught se." << endl;
}
}
当我调用 A 的构造函数时没有像下面这样的括号,它正确地抛出了预期的异常。
A a;
这种情况下的输出是:
$ ./a.exe
Caught se.
但是如果我用下面的语法调用 c'tor,它不会抛出异常,并继续下一行,就好像什么都没发生一样!
A a();
在这种情况下,输出是......
$ ./a.exe
No exception.
我在 Ubuntu 11.10 和 windows usign minGW 上尝试了上述程序,都给出了相同的结果。我为 minGW 使用 GCC 版本 4.5.2,为 Ubuntu 使用 4.6.1。
关于这种奇怪行为的任何线索?这是 gcc 中的错误,还是我的方式不正确?