在c ++中将非const转换为const

时间:2011-05-02 05:48:47

标签: c++ types casting constants const

我知道您可以使用const_castconst投射到非const

但是如果你想将非const投射到const,你应该怎么用?

6 个答案:

答案 0 :(得分:45)

const_cast可用于删除向对象添加常量。当您想要调用特定的重载时,这非常有用。

受挫的例子:

class foo {
    int i;
public:
    foo(int i) : i(i) { }

    int bar() const {
        return i;    
    }

    int bar() { // not const
        i++;
        return const_cast<const foo*>(this)->bar(); 
    }
};

答案 1 :(得分:28)

您无需const_cast添加const ness:

class C;
C c;
C const& const_c = c;

请仔细阅读此question and answer

答案 2 :(得分:22)

STL,因为C ++ 17现在提供std::as_const就是这种情况。

请参阅:http://en.cppreference.com/w/cpp/utility/as_const

使用:

CallFunc( as_const(variable) );

而不是:

CallFunc( const_cast<const decltype(variable)>(variable) );

答案 3 :(得分:5)

如果您愿意,可以使用const_cast,但实际上并不需要 - 非const可以隐式转换为const。

答案 4 :(得分:2)

如果将非const参数传递给具有const参数

的函数,则会进行隐式转换

答案 5 :(得分:2)

const_cast也可用于添加const行为。

来自cplusplus.com

  

这种类型的铸造操纵了   对象的常量,要么是   设置或被删除。