代码之家  ›  专栏  ›  技术社区  ›  Anthony Atmaram

const\u cast与static\u cast

  •  11
  • Anthony Atmaram  · 技术社区  · 14 年前

    添加 const const_cast<T> static_cast<T> . 在最近的一个问题中,有人提到他们更喜欢使用 static_cast const_cast 静态浇铸 做一个变量常量?

    4 回复  |  直到 13 年前
        1
  •  15
  •   James McNellis    14 年前

    两个都不要用。初始化引用对象的常量引用:

    T x;
    const T& xref(x);
    
    x.f();     // calls non-const overload
    xref.f();  // calls const overload
    

    或者,使用 implicit_cast 函数模板,如 the one provided in Boost

    T x;
    
    x.f();                           // calls non-const overload
    implicit_cast<const T&>(x).f();  // calls const overload
    

    如果有两种选择 static_cast const_cast 静态浇铸 抛弃 因为它是唯一可以这样做的施法者,而抛弃它本身就是危险的。通过抛出常量获得的指针或引用修改对象可能会导致未定义的行为。

        2
  •  3
  •   bcat    14 年前

    static_cast 是最好的,因为它只允许你从非- const 常数

        3
  •  2
  •   Community dbr    7 年前

    这是一个很好的用例 implicit_cast 函数模板。

        4
  •  1
  •   StackedCrooked    14 年前

    template<class T>
    const T & MakeConst(const T & inValue)
    {
        return inValue;
    }