代码之家  ›  专栏  ›  技术社区  ›  Robben_Ford_Fan_boy

使用C++样式转换从空隙*类型*:静态分析或重新解释

  •  7
  • Robben_Ford_Fan_boy  · 技术社区  · 14 年前

    因此,如果您从Void*转换为Type*或从Type*转换为Void*,您应该使用:

    void func(void *p)
    {
        Params *params = static_cast<Params*>(p);
    }
    

    void func(void *p)
    {
        Params *params = reinterpret_cast<Params*>(p);
    }
    

    对我来说,静态施法似乎更为正确,但我看到两者都用于相同的目的。另外,转换的方向也很重要。i、 e.我是否仍应使用静态\u cast:

    _beginthread(func,0,static_cast<void*>(params)
    

    3 回复  |  直到 14 年前
        1
  •  8
  •   Edward Strange    14 年前

    您应该使用静态\u cast,以便正确地操纵指针以指向正确的位置。但是,只有在首先使用static cast将指针强制转换为void*时,才应该这样做。否则,您应该将\u cast重新解释为与原始指针完全相同的类型(没有基之类的)。

        2
  •  4
  •   Community clintgh    7 年前

    使用 static_cast reinterpret_cast 当没有其他铸造操作时。以下主题提供了更多上下文和详细信息:

    What wording in the C++ standard allows static_cast<non-void-type*>(malloc(N)); to work?

    When to use reinterpret_cast?

        3
  •  0
  •   sharptooth    9 年前

    reinterpret_cast static_cast 我会做的。在转换为 void* 指针。