我已经编写了近二十年的C和C++代码,但这些语言的一个方面我从未真正理解过.我显然使用常规演员表,即
MyClass *m = (MyClass *)ptr;
Run Code Online (Sandbox Code Playgroud)
到处都是,但似乎有两种其他类型的演员,我不知道其中的区别.以下代码行之间有什么区别?
MyClass *m = (MyClass *)ptr;
MyClass *m = static_cast<MyClass *>(ptr);
MyClass *m = dynamic_cast<MyClass *>(ptr);
Run Code Online (Sandbox Code Playgroud) 类型检查仅仅是整数比较吗?或者有一个是否有意义GetTypeId虚拟函数来区分哪个会使它成为整数比较?
(只是不希望事物成为类名的字符串比较)
编辑:我的意思是,如果我经常期待错误的类型,使用类似的东西是否有意义:
struct Token
{
enum {
AND,
OR,
IF
};
virtual std::size_t GetTokenId() = 0;
};
struct AndToken : public Token
{
std::size_t GetTokenId() { return AND; }
};
Run Code Online (Sandbox Code Playgroud)
并使用该GetTokenId成员而不是依赖dynamic_cast.