c++ - 抑制从 const 方法打印的消息

标签 c++ methods constants

我有一个类,它有一个方法,该方法对某些变量执行一些检查并返回一个值,并最终打印一条警告消息。由于该方法不会更改任何类变量,因此我将其定义为 const。但是,为了避免淹没输出,我想在几次(或一次)打印后抑制警告打印。我一直无法找到保持方法 const 的解决方案,这可能(简单)吗?

最佳答案

使用 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;
};

Live example

由于多线程的评论很多,以原子计数器为例

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;
};

关于c++ - 抑制从 const 方法打印的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19724425/

相关文章:

c++ - 如何以编程方式显示Windows系统(标题栏)菜单

java - 如何将静态库链接到在 NDK Android Build 中用作 native 库的源

c# - 在 C# 中声明 const 的更优雅的方法是什么

c++ - 如何根据用户设置的初始变量设置一组常量值

c++ - 创建用户定义的复制构造函数时无法创建对象

c++ - 缺陷报告 1207

c++ - 在 C++ 控制台应用程序中编写 sql 查询?

java - 使用数组和多种方法进行编码给我带来错误并且无法找出原因

java - 引用、浅复制和深复制

c# - Try-catch until success - 通用方法或委托(delegate)的执行循环