为什么 tellp() 会是一个非常量?

Why would tellp() be a non-const?

本文关键字:一个 非常 常量 tellp 为什么      更新时间:2023-10-16

我正在研究一个记录器,它有一个继承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