c++ - 如何在 const 函数中调用非常量函数 (C++)

标签 c++ function constants const-correctness const-cast

我有一个看起来像这样的旧函数:

int Random() const
{
  return var_ ? 4 : 0;
}

我需要在该遗留代码中调用一个函数,使其现在看起来像这样:

int Random() const
{
  return var_ ? newCall(4) : 0;
}

问题是我收到了这个错误:

In member function 'virtual int Random() const':
class.cc:145: error: passing 'const int' as 'this' argument of 'int newCall(int)' discards qualifiers

现在我知道为了修复这个错误,我可以让我的 newCall() 成为一个 const 函数。但是后来我必须在 newCall() 中进行几个函数调用,所以现在我必须将所有这些函数调用都设为 const。依此类推,直到最终我觉得我的程序的一半将是 const。

我的问题:有没有办法在 Random() 中调用不是 const 的函数?或者是否有人对如何在 Random() 中实现 newCall() 而不使我的程序一半成为常量有任何想法。

谢谢

-乔什

最佳答案

int Random() const
{
  return var_ ? const_cast<ClassType*>(this)->newCall(4) : 0;
}

但这不是一个好主意。尽可能避免!

关于c++ - 如何在 const 函数中调用非常量函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008541/

相关文章:

ios - Objective-C 中的常量和 "duplicate symbol"链接器错误

c++ - 为什么我不能从 const String& 方法返回 NULL?

c++ - OpenSSL verify_callback 和 SSL_connect

c# - 类中的属性/方法占用内存空间吗?

c - 如何在 C 中定义指向函数的指针并将该指针分配给函数?

c++ - 如何在不知道 C++ 基类名称的情况下调用子类中基类的成员?

C++ 运算符 [] 重载 SNAFU

c++ - 为什么 C++ 没有 &&= 或 ||= bool 值?

c++ - 将 OpenMP 与 clang 一起使用

C++写二进制文件。来自 opencv 矩阵的 uchar* 数据