gpt4 book ai didi

c++ - 抛出静态类型的理由?

转载 作者:可可西里 更新时间:2023-11-01 18:21:41 25 4
gpt4 key购买 nike

根据 the C++ FAQ ,当抛出一个对象时,它是使用表达式的 static 类型抛出的。因此,如果您有:

catch ( some_exception const &e ) {
// ...
throw e; // throws static type, possibly causing "slicing"; should just "throw;" instead
}

e实际上对派生自some_exception的某个类的引用,上面的throw会导致对象被静静地“切片”。是的,我知道正确的答案只是throw;,但事情的方式似乎是不必要的困惑和错误来源。

这样做的理由是什么?为什么您希望它通过对象的动态类型抛出?

最佳答案

当您throw 时,会根据throw 的操作数构造一个临时对象,而该临时对象就是被捕获的对象。

C++ 不支持基于表达式的动态类型复制内容或创建对象,因此临时对象是操作数的静态类型。

关于c++ - 抛出静态类型的理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com