我有一个类,其方法对某些变量执行一些检查并返回一个值,并最终打印一条警告消息。由于该方法不会更改任何类变量,因此我将其定义为 const。但是,为了避免淹没输出,我想在几次(或一次)打印后抑制警告打印。我一直无法找到保持方法 const 的解决方案,这可能(容易)吗?
问问题
98 次
2 回答
8
使用mutable
计数器怎么样?我认为,它应该是可以接受的,因为它不是对象的状态,而是内部逻辑状态。
像这样的东西
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable size_t counter;
};
由于有很多关于多线程的评论,例如原子计数器
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable std::atomic<size_t> counter;
};
于 2013-11-01T09:59:46.667 回答
0
你可以(坚持ForEveR的反例)
const
通过抛弃const_cast<int>(counter)
- 使用不在此对象中的变量作为计数器
解决方案将取决于您的实际问题,您会在问题中添加代码片段吗?
于 2013-11-01T10:27:20.140 回答