C++中的dyn_cast与dynamic_cast有何区别?

15
在我正在处理的代码库中,我经常遇到 dyn_cast。它是否与 dynamic_cast 相同,还是有所不同?我进行了一些搜索,但没有找到太多信息。

5
dyn_cast<T>()是来自LLVM的运算符,与标准的C++ dynamic_cast<T> 运算符行为相似。 - wkl
啊,好的,因为我正在处理与LLVM相关的东西。谢谢。 - Cemre Mengü
1
@birryree:你应该把这个发表为答案。 - Keith Thompson
http://llvm.org/docs/ProgrammersManual.html - Lwin Htoo Ko
2个回答

19

dyn_cast 是 LLVM API 中的一部分(在谷歌搜索中排名第一、第二、第三等位置),它与 dynamic_cast 一样工作,但是一个区别是该类不需要像 dynamic_cast 那样具有虚表。请参阅手册获取更多信息。


7
实际上,llvm::dyn_cast_or_null 相当于 dynamic_cast。如果传递了空指针,这些函数将产生空指针,而 llvm::dyn_cast 则会退出。

无论是llvm::dyn_cast_or_null还是llvm::dyn_cast,如果值不符合所需类型,则都会返回null。它们之间的区别在于是否接受null作为参数。 - Emoun
关于llvm::dyn_cast_or_null可以像dynamic_cast一样接受空指针作为参数的好处,这是一个很好的观点。然而,不需要类具有虚表的观点仍然成立。因此,llvm::dyn_cast_or_nulldynamic_cast并不等价。 - Hari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接