相关疑难解决方法(0)

常规演员与static_cast与dynamic_cast

我已经编写了近二十年的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)

c++ pointers casting

1661
推荐指数
8
解决办法
67万
查看次数

dynamic_cast通常如何实现?

类型检查仅仅是整数比较吗?或者有一个是否有意义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.

c++ dynamic-cast

6
推荐指数
1
解决办法
5029
查看次数

标签 统计

c++ ×2

casting ×1

dynamic-cast ×1

pointers ×1