【问题标题】:Difference between basic_istream<>::tellg() and basic_ostream<>::tellp() [closed]basic_istream<>::tellg() 和 basic_ostream<>::tellp() 之间的区别 [关闭]
【发布时间】:2013-01-25 12:47:22
【问题描述】:

我只是想知道为什么basic_istream&lt;&gt; 类中定义的成员函数tellg()basic_ostream&lt;&gt; 类中定义的tellp() 具有不同的名称。那是因为basic_fstream&lt;&gt; 是从basic_istream&lt;&gt;basic_ostream&lt;&gt; 派生的吗?

【问题讨论】:

    标签: c++ filestream


    【解决方案1】:

    tellg() 获取get 指针的位置,tellp() 获取put 指针的位置,其中之一是您在文件中读取的位置,第二个是您在文件中写入的位置。所以这两个函数做不同的事情并返回不同的值。为什么你认为他们应该有相同的名字?

    【讨论】:

    • 它们都将文件指针定位在两个不同的类中
    • @user1577873 但您可以以附加模式打开文件,以便对两个指针都感兴趣 - 您可以读取和写入文件。
    • @IvayloStrandjev 不,在文件中它们总是具有相同的值。它们在其他类型的流中可能不同,例如std::stringstream
    • @Ivaylo 这正是我所指的,当我说名称不同时可能是因为 basic_fstream(用于双向文件)派生自类 basic_istream 和 basic_ofstream。否则名称可能相同。这样,用户就不会感到困惑。
    • @Potatoswatter 即使你打电话给seekpseekg,你确定吗?
    【解决方案2】:

    你如何在双向流中区分它们, 喜欢std::fstreamstd::stringstream?允许流 为输入和输出维护单独的指针:fstream 没有,但stringstream 有。所以你需要一个标志来 指出您想要哪一个(如streambuf 中的情况),或 你需要两个独立的函数。

    【讨论】:

    • +1 为什么fstream 不维护单独的指针?
    • 因为大多数(或可能所有)文件系统都没有。以无法在 Unix 或 Windows 下实现的方式指定功能不会很有用。
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2014-11-28
    • 2016-08-01
    • 2011-10-07
    • 2012-01-12
    相关资源
    最近更新 更多