C++ 将常量数据传递给无常量转换的非常量函数

C++ 将常量数据传递给无常量转换的非常量函数,c++,constants,C++,Constants,如果我使用const\u cast,方法(Xp\u T*pParameters)接受const Xp\u T& 参数类型,但我不希望在此处使用const\u cast,我希望 修改方法(Xp\u T*pParameters)使其接受常量Xp\u T&参数类型 bool Class::Method(const Parameters& rParameters ) { rParameters.Method(&m_Xp); // I wouldn't prefer to use

如果我使用
const\u cast
方法(Xp\u T*pParameters)
接受
const Xp\u T&
参数类型,但我不希望在此处使用
const\u cast
,我希望 修改
方法(Xp\u T*pParameters)
使其接受
常量Xp\u 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));
}
模板
无效方法(Xp_T*p参数)
{
(*pParameters)=(static_cast(*this));
}

试图修改最初声明为
常量的变量的行为未定义


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

如果“方法”只应修改“类”中的一个或几个成员变量,一种替代方法是声明这些成员可变,然后定义一个声明为常量的“方法2”,但是它仍然可以修改可变项。

为什么不想使用
const\u cast
?它的设计目的与您所做的完全一样,将
常量*
传递给接受
*
但不会修改它的旧函数。@NathanOliver它确实修改了它,这确实违反了合同。第一个函数表示它不会修改参数的值,然后继续修改该值。修改常量数据也是未定义的行为。别这样@斯拉瓦,这也没关系,只要你知道,引用引用的是非
const
对象。