c++ - 为什么tellp() 是一个非常量?

标签 c++ constants stringstream seek

我正在开发一个记录器,它有一条消息继承 std::stringstream .

当我想打印消息时,我调用一个函数来接受消息 const :

void logger::log_message(message const & msg)

在该函数中,我想检查消息中是否写入了任何内容。如果没有,我可以忽略这个电话。我使用以下内容:

if(const_cast<message &>(msg).tellp() == 0)
{
    return;
}

我必须使用 const_cast<>()因为tellp()不是const 。我想知道为什么检索当前的查找位置会对流产生副作用。我能理解seekp()这会改变位置,但不会改变 tellp() 。这可能是规范中的错误吗?

最佳答案

如果失败,tellp() 将更改对象的 rdstate

参见: https://en.cppreference.com/w/cpp/named_req/UnformattedOutputFunction

关于c++ - 为什么tellp() 是一个非常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57237779/

相关文章:

r - R 中的物理常数

c++ - 哪种类型转换风格更好,为什么?

c++ - 使用 stringstream 读取浮点值的奇怪失败

c# - MFC 应用程序中的 WPF System.Windows.Navigation.NavigationWindow

c++ - 在 clang 格式的控制语句之后中断

c++ - 如何忽略警告 c4090

c++ - 当套接字中发送速度太快时连接缓冲区

ruby - 继承但不与父类(super class)共享,不共享命名空间的变量/常量

c++ - 如何使用 stringstream 将数据正确存储到数组结构中?

c++ - 在 C++ 中解析 .dat 文件