#include <fstream>
int main()
{
std::ifstream fin{ "" };
size_t n = fin.tellg(); // ok
}
代码编译正常。然而,根据cppreference ,我发现 fin.tellg()
是 std::fpos
的一种类型,它没有定义将自身转换为 size_t
的能力含蓄地。
有什么解释吗?
最佳答案
你说得对,它返回一个 std::fpos
。现在让我们看看它是如何定义的:
template<class _Statetype>
class fpos {<...>}
fpos
也有一个转换运算符,用于转换为 streamoff
类型,即“流偏移”类型:
__CLR_OR_THIS_CALL operator streamoff() const
{ // return offset
return ((streamoff)(_Myoff + _FPOSOFF(_Fpos)));
}
在我的机器上 streamoff
恰好被定义为 typedef _Longlong streamoff;
,我相信它在你的机器上也是类似的。这就是它可以转换为 type_t
的原因,但是没有什么能阻止它大于 type_t
,所以要小心。
关于c++ - [std::streampos] 可以隐式转换为 [size_t] 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714291/