为什么std :: stream操纵器基础结构中类型不一致?

dmc*_*kee 6 c++ types iostream c++-standard-library

今天要做一点流输出,并且需要强制格式化字段。回顾大多数操纵器都是持久性的,我决定向恶作剧者投保:

auto oldp = std::cout.precision(); // Cache this to be able to undo a set
std::out << "threshold" 
         << std::setprecision(2) << m_threshold   // set 
         << std::setprecision(oldp) << std::endl; // restore 
Run Code Online (Sandbox Code Playgroud)

我的linter在“恢复”行上引发了有关隐式整数向下转换的警告。

稍微四处张望,'sure'nuf,std::setprecision需要int,而std::ios_base::precision返回streamsize(这long在我前面的系统上是一个)。

因此,短绒猫正在提出有效的申诉(而且很容易就可以解决),但是为什么这种情况仍然存在?