将const数据传递到无需const_cast的非const的功能

Pass const data to function taking non-const without const_cast

本文关键字:const cast 的非 功能 数据      更新时间:2023-10-16

如果我使用 const_castMethod(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));
}

试图修改最初声明为 const的变量的行为是 nes

唯一真正安全的方法是将const变量的价值副本录制,然后将其传递给您的非const函数。该功能进行的任何修改将在呼叫站点上丢弃。

如果"方法"仅应修改" class"中的一个或几个成员变量,一个替代方法是声明这些成员 Mutable ,然后定义A声明为const的"方法2",但它仍然能够修改突变物。