我有一个Foo类,如下所示
Foo.h
#pragma once
class Foo
{
public:
Foo() = default;
~Foo() = default;
void DoSomething();
};
Run Code Online (Sandbox Code Playgroud)
Foo.cpp
#include "Foo.h"
void Foo::DoSomething()
{
throw "something happened";
}
Run Code Online (Sandbox Code Playgroud)
我使用的类如下:
#include <iostream>
#include "Foo.h"
int main()
{
try
{
Foo foo;
foo.DoSomething();
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望代码进入catch块.但是,它永远不会进入那里.我在这做错了什么?
Nat*_*ica 10
当你这样做
throw "something happened"
Run Code Online (Sandbox Code Playgroud)
你不是在抛出一个std::exception.你正在抛出一个类型为的字符串文字const char[N].为了捕获它,你需要一个类似的捕获块
catch (const char* e)
{
std::cout << e << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
或者你可以抛出一些std::exception类似a std::runtime_error和看起来像的东西
void Foo::DoSomething()
{
throw std::runtime_error("something happened");
}
...
catch (const std::exception& e) // catch by reference to const
{
std::cout << e.what() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
您还可以指定默认处理程序
catch (...)
{
std::cout << "something bad happened - cannot recover" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它将捕获任何抛出的异常但你无法访问抛出的任何东西,所以你只能给出一般信息.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |