捕获多个参数

Ism*_*ush 3 c++ exception try-catch

首先我在cplusplus.com上找到以下引用:

catch格式类似于始终至少有一个参数的常规函数​​.

但我试过这个:

try
{
    int kk3,k4;
    kk3=3;
    k4=2;
    throw (kk3,"hello");
}
catch (int param)
{
    cout << "int exception"<<param<<endl;     
}
catch (int param,string s)
{
    cout<<param<<s;
}
catch (char param)
{
    cout << "char exception";
}
catch (...)
{
    cout << "default exception";
}
Run Code Online (Sandbox Code Playgroud)

编译器不会抱怨带有大括号和多个参数的throw.但它实际上抱怨了多个参数的捕获,尽管参考文献说的是什么.我糊涂了.是否trycatch允许这种多重与否?如果我想抛出一个包含多个变量的异常,或者没有相同的类型,该怎么办?

Arm*_*yan 10

(kk3,"hello")是一个逗号表达式.逗号表达式计算从左到写的所有参数,结果是最右边的参数.所以在表达中

int i = (1,3,4); 
Run Code Online (Sandbox Code Playgroud)

我变成了4.

如果你真的想抛出它们(出于某种原因),你可以这样抛出

 throw std::make_pair(kk3, std::string("hello")); 
Run Code Online (Sandbox Code Playgroud)

并抓住这样:

catch(std::pair<int, std::string>& exc)
{
}
Run Code Online (Sandbox Code Playgroud)

catch子句都有一个确切的说法

...
Run Code Online (Sandbox Code Playgroud)

HTH