C++ C++;例外情况不存在';默认构造函数不会被抛出吗?
可能重复:C++ C++;例外情况不存在';默认构造函数不会被抛出吗?,c++,exception,C++,Exception,可能重复: 我有一个非常简单的C++类“A”,它的空构造函数在主体中被调用。唯一的空c'tor只是抛出一个异常SomeException #include <iostream> using namespace std; class SomeException : public exception { }; class A { public: A() { throw SomeException(); } }; int main() {
我有一个非常简单的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.exe
Caught se.
但如果我用下面的语法调用c'tor,它不会抛出异常,并继续到下一行,就好像什么都没发生一样
A a();
本例中的输出是
$ ./a.exe
No exception.
我在Ubuntu11.10和WindowsUsignMingw上尝试了上述程序,两个程序都给出了相同的结果。我对minGW使用GCC版本4.5.2,对Ubuntu使用GCC版本4.6.1
有关于这种奇怪行为的线索吗?这是gcc中的错误,还是我的方法不正确
A a();
是函数声明,而不是对象实例化。没有构造对象,没有调用构造函数,没有引发异常
它被称为最烦人的解析
#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 b;
它们并不等同。第二个创建一个类型为A
的对象,称为b
。第一个声明了一个名为a
的方法,该方法不接受任何参数并返回a
是函数声明,而不是对象实例化。没有构造对象,没有调用构造函数,没有引发异常
它被称为最烦人的解析
#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 b;
它们并不等同。第二个创建一个类型为
A
的对象,称为b
。第一个声明了一个名为a
的方法,该方法不接受任何参数,并返回刚刚发现的a
!我的错。我应该把它作为A=A()调用;而不是A();虽然程序是用后面的声明编译的,但它并没有像预期的那样工作。Thanx Martinho,我正在阅读你的链接..你刚刚发现了!我的错。我应该把它作为A=A()调用;而不是A();虽然这个程序是用后面的声明编译的,但它并没有像预期的那样工作。Thanx Martinho,我正在阅读你的链接。。