Gra*_*min 20 c++ const function const-correctness const-cast
我有一个看起来像这样的遗留函数:
int Random() const
{
return var_ ? 4 : 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要在遗留代码中调用一个函数,以便它现在看起来像这样:
int Random() const
{
return var_ ? newCall(4) : 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到了这个错误:
In member function 'virtual int Random() const':
class.cc:145: error: passing 'const int' as 'this' argument of 'int newCall(int)' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
现在我知道为了解决这个错误我可以使我newCall()
的const函数.但后来我有几个newCall()
函数调用,所以现在我必须使所有这些函数调用const.等等,直到最后我觉得我的程序的一半将是const.
我的问题:有没有办法在Random()中调用一个不是const的函数?或者有没有任何想法如何实现newCall()
内部Random()
而不使我的程序const的一半.
谢谢
-josh
jus*_*tin 19
你应该改变你的程序正确使用/声明const ...
一种替代方法是使用const_cast.
Naw*_*waz 17
int Random() const
{
return var_ ? const_cast<ClassType*>(this)->newCall(4) : 0;
}
Run Code Online (Sandbox Code Playgroud)
但这不是一个好主意.如果可能的话,避免!
const_cast<MyClass *>(this)->newCall(4)
Run Code Online (Sandbox Code Playgroud)
仅当您确定 newCall 不会修改“this”时才执行此操作。