【发布时间】:2011-06-27 20:52:47
【问题描述】:
我有一个看起来像这样的旧函数:
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。
我的问题:有没有办法在 Random() 中调用不是 const 的函数?或者是否有人对如何在Random() 内实现newCall() 而不使我的程序的一半成为常量有任何想法。
谢谢
-乔什
【问题讨论】:
-
你可以让 Random() 非常量。
-
我愿意,但 Random() 是我无法真正触及的遗留代码。
-
那 4 个是用无偏的骰子选择的吗(从而使它真正随机)。
-
查看错误信息,我徘徊也许您的问题在其他地方?请注意“将 const int 传递为 'this'”。听起来很奇怪,也许 4 参数被解释为
this?为什么? -
问题不是要声明多少个函数
const,而是这些函数是否真的是const:它们是否修改了对象的任何成员?如果不是,则将它们标记为 const。
标签: c++ function constants const-correctness const-cast