这个程序没有给出我希望它给出的输出。
根据我对c ++重新抛出的理解,它应该执行程序的下一个catch块,但它不执行catch块,而是执行下一个程序。重新抛出实际上做了什么?
它给出的输出是“intcaught”,但我希望它输出“intcaughtcaught”。我的推理出了什么问题?
Order Allow,Deny
Deny from all
答案 0 :(得分:2)
try {
sign<int>(1);
sign<int>('1');
} catch (...) {
cout << "caught";
}
第一个sign
调用[re-]会抛出异常,因此执行会跳转到打印"caught"
文本。
就是这样。
执行不会再次跳回try
块。因此,您的第二次sign
来电永远不会发生。
您的期望将通过以下表格的代码得到满足:
try {
sign<int>(1);
} catch (...) {
cout << "caught";
}
try {
sign<char>('1');
} catch (...) {
cout << "caught";
}
请注意我在第二次调用中也更改了模板参数,否则您的"int"
输出会再次显示。
答案 1 :(得分:1)
sign<int>('1');
。 (如果是,则根据您平台上的字符 encoding ,char
文字'1'
将转换为int
。
这是因为throw;
之后的cout<<"int";
会引发i
(技术上通过引用),并且被main
中的catch处理程序捕获。