可能重复:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?对于默认构造函数,C++异常不会被引发?
我有一个非常简单的C++类 “A”,其空构造主被调用。唯一的空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的构造函数没有类似下面的parantheses时,它正确地引发了预期的异常。
A a;
在这种情况下的输出是:
$ ./a.exe
Caught se.
但如果我调用与下面的语法c'tor,它不会抛出异常,并继续下一行,仿佛什么发生了!
A a();
在这种情况下的输出是...
$ ./a.exe
No exception.
我试图在Ubuntu 11.10并且还取决于usign MINGW窗口上面的程序,并且两个给相同的结果。我在minGW上使用GCC版本4.5.2,在Ubuntu上使用4.6.1。
有关这种奇怪行为的任何线索?这是gcc中的错误,还是我的方式不正确?
你刚刚发现[最令人烦恼的解析](http://stackoverflow.com/questions/180172/why-is-it-an-error-to-use-an-empty-set-of-brackets-到呼叫一个构造函数与 - 没有)! –
我的不好。我应该调用它作为 A a = A();而不是A a();虽然该程序与后来的声明一起编译,但它不能按预期工作。 –
Thanx Martinho,我正在阅读你的链接.. –