C++ 为什么MinGW 4.8不将ex.what()视为虚拟的?
我使用QtCreator3.0.1和MingW4.8 32位作为编译器 当我将以下代码放入C++ 为什么MinGW 4.8不将ex.what()视为虚拟的?,c++,qt,exception,mingw,C++,Qt,Exception,Mingw,我使用QtCreator3.0.1和MingW4.8 32位作为编译器 当我将以下代码放入main()函数的最顶层时(在Qt完成所有工作之前),我在控制台上得到的输出是“std::exception”,而不是我所期望的“哎哟”: try { throw std::logic_error{"Whoops"}; } catch (std::exception ex) { std::cout << ex.what() << std::endl; } VS201
main()
函数的最顶层时(在Qt完成所有工作之前),我在控制台上得到的输出是“std::exception”,而不是我所期望的“哎哟”:
try {
throw std::logic_error{"Whoops"};
}
catch (std::exception ex) {
std::cout << ex.what() << std::endl;
}
VS2013中编译的代码与我所期望的完全相同,输出“哎哟”
std::exception::what()
是虚拟的,那么为什么会发生这种情况呢?正如克里斯所说,你是虚拟的。您可以通过捕获常量引用()来防止这种情况:
试试看{
抛出std::逻辑_错误{“哎哟”};
}捕获(const std::exception&ex){
std::cout See.ex
是一个std::exception
,无论是静态还是动态。我只是在查看上面发布的@chris链接后发现了这一点。我会在7分钟内接受,如果允许的话:)
try {
throw std::logic_error{"Whoops"};
}
catch (std::exception ex) {
std::exception* ex2 = &ex;
std::cout << ex2->what() << std::endl;
}
try {
throw std::logic_error{"Whoops"};
} catch (const std::exception& ex) {
std::cout << ex.what() << std::endl; // Whoops
}