将const数据传递给非const而不使用const_cast的函数

时间:2016-11-28 14:21:27

标签: c++ const

如果我使用const_cast,则Method(Xp_T* pParameters)接受const Xp_T& 参数类型,但我不想在这里使用const_cast并希望 修改Method(Xp_T* pParameters),使其接受const Xp_T&参数类型。

bool Class::Method(const Parameters& rParameters )
{
    rParameters.Method(&m_Xp); // I wouldn't prefer to use const_cast here
    return true;
}

基类方法:

template<typename Xp_T>
void Method(Xp_T* pParameters )
{
     (*pParameters) = (static_cast< Xp_T&>(*this));
}

2 个答案:

答案 0 :(得分:3)

尝试修改最初声明为const的变量时的行为是未定义

唯一真正安全的方法是获取const变量的值副本,并将其 - 或指向该变量的指针 - 传递到非const函数中。该功能所做的任何修改都将在呼叫站点被丢弃。

答案 1 :(得分:0)

如果&#34;方法&#34;只应修改&#34; Class&#34;中的一个或几个成员变量,一种替代方法是声明那些成员可变,然后定义一个&#34; Method2&#34;这被声明为const,但它仍然可以修改mutable。