gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:14:07 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com