Nem*_*emo 13 c++ language-lawyer
标题基本概括了所有内容.
我实现我自己的streambuf类,我想知道什么时,他们决定包括委员会的想法std::streambuf::seekpos()和std::streambuf::seekoff()(同样地,对于相关的pubseekpos()和pubseekoff()).
在我看来,它seekpos(x)应该具有与seekoff(x, std::ios::beg)我能想象的每种情况相同的效果.但也许我的想象力不够好.所以,为什么你想要将两者seekpos完全归入seekoff?或者至少,为什么不让前者的默认实现只调用后者?
如果答案是"因为这是STL所做的"或类似的,那么假设我询问STL或类似的理由.
(我意识到第一个参数seekpos是a streampos的第一个参数seekoff是a streamoff.但请注意,27.4.3.2 [lib.fpos.operations]要求流位置可以转换为流偏移并返回,所以我不认为这是答案.)
Chr*_*phe 13
这两个函数使用不同的参数:
你是完全正确的:他们可以双向转换.但是有一个微妙的语义差异:
streampos直观地与固定位置相关,而streamoff在某种程度上与文件中的运动有关. streampos从另一个streampos使一个streamoff.streampos到streamoff一个新的streampos.wstreampos用于该位置(因为显然a中的位置wchar_t具有与char流中的位置不同的含义).streamoff用于运动,因为它是与位置相比的相对运动.如果您使用模板编程,这些语义差异对于特征更明确:S::pos_type和S::off_type.
无论这些语义潜意识如何,这种差异的真正起源是历史的,并且与C标准库有关,正如Plauger先生在本文中所解释的那样:
我可以验证这已经是C89标准的情况.由于原始K&R中没有提及这些功能,因此UNIX历史学家可能会更多地了解更远的路径.
本文解释了标准委员会最近的想法.似乎历史性的差异受到了质疑,现在还不再清楚是否真的需要它.
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |