c++ - [std::streampos] 可以隐式转换为 [size_t] 吗?

标签 c++ type-conversion standards filestream

#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/

相关文章:

c++ - 错误 : ISO C++ forbids in-class initialization of non-const static member

c++ - 当 select 子句中使用 case 时,Oracle 数字精度和小数位数均为零

c++ - WinDivert 问题

javascript - 如何选择列表 (li) 内的所有链接 (a)

c++ - 不带 'GetString()' 的 CString 到 std::string 的转换

c++ - "class template"与 "template class"

sql - UNION ALL 具有不同列类型的两个 SELECT - 预期行为?

c++ - linux套接字接收离开

c++ - 为什么这个递归会产生段错误?

c - 为什么这个程序输出 Yes,而它应该抛出错误或 NO