为什么 tellp() 是非常量?

Why would tellp() be a non-const?

我正在开发一个记录器,它有一条消息继承了 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