我应该以哪种方式捕获异常?

iam*_*oyd 2 c++

我有一个带有自定义异常的模板类:

MyClass<T>::MyException;
Run Code Online (Sandbox Code Playgroud)

在使用我的类时,我只关心是否抛出了异常,因此我可以以编程方式处理它.因此,当我发现异常时,我不愿意为此命名.

try {
   MyClass<T>::MyMethod ();
} catch (typename MyClass<T>::MyException) {
   //Act appropriately
}
Run Code Online (Sandbox Code Playgroud)

我想知道添加引用运算符时是否有任何区别,例如

} catch (typename MyClass::MyException &) {
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,除了识别类型之外,我最终不会使用捕获的异常.一个与另一个有任何权衡或性能影响吗?

Seb*_*edl 6

无论您是否使用,按值捕获都会创建异常对象的副本.所以不要.始终以引用方式捕获.没有理由抓住价值.

顺便说一句,typename关键字是多余的,因为没有涉及任何模板.