C++ 中 tellg 和 tellp 的区别

2025 年 3 月 24 日 | 4 分钟阅读

在本文中,我们将讨论 C++ 中 tellgtellp 的区别。但在讨论它们的区别之前,我们必须了解 C++ 中的 tellg 和 tellp。

什么是 tellg() 函数?

tellg() 函数返回流中指针的当前 “get” 位置。它不接受任何参数,并返回成员类型 pos_type 的整数数据类型值,该值是 get 流 指针的当前位置。

tellg() 函数既不提供文件大小,也不提供从开始的字节偏移量。它只提供一个令牌值,可用于将来搜索相同的位置。甚至不保证我们可以将类型转换为整数类型。

语法

它具有以下语法:

返回值

如果指针指向有效位置,此函数返回 get 指针的当前位置。否则,返回 “-1”

示例

其中,

  • position 是一个 int 类型的变量。
  • obj 是一个文件处理对象。

示例

让我们来看一个 C++ 程序来演示 tellg() 函数的使用。

输出

Difference between tellg and tellp in C++

说明

  • 返回值:tellg() 函数返回的 std::streampos 类型的值表示流中 get 指针的当前位置。
  • 流位置:返回的位置指示输入流中下一次输入操作发生的位置。
  • 查找位置:此位置可用于稍后使用 seekg() 方法将 get 指针设置为输入流中的特定位置。
  • 兼容性:std::ifstream、std::istringstream、std::stringstream 和其他输入流类都与 tellg() 兼容。
  • 错误条件:如果在流操作期间发生错误,tellg() 函数可能会返回指示失败的结果。必须使用 good()fail() 成员方法检查流的状态,以确保正确处理错误。

什么是 tellp() 函数?

tellp() 函数与 输出 流一起使用,返回流中指针的当前 “put” 位置。它不接受任何 参数,并返回成员类型 pos_type 的整数数据类型值,该值是 put 流指针的当前位置。

语法

它具有以下语法:

返回值

如果指针指向有效位置,此函数返回 get 指针的当前位置。否则,返回 “-1”

示例

其中,

  • position 是一个 int 类型的变量。
  • obj 是一个文件处理对象。

示例

让我们来看一个 C++ 程序来演示 tellp() 函数的使用。

输出

Difference between tellg and tellp in C++

说明

  • 返回值:tellp() 函数返回的 std::streampos 类型的值表示流中 put 指针的当前位置。
  • 流位置:返回的位置指示输出流中下一次输出操作发生的位置。
  • 查找位置:此位置可用于稍后使用 seekp() 方法将 put 指针设置为输出流中的特定位置。
  • 兼容性:std::ofstream、std::ostringstream、std::stringstream 和其他输出流类都与 tellp() 兼容。
  • 错误条件:如果在流操作期间发生错误,tellp() 函数可能会提供一个指示失败的值。

tellg() 和 tellp() 的区别

Difference between tellg and tellp in C++

C++ 中 tellg()tellp() 函数之间存在几个主要区别。tellg() 和 tellp() 函数之间的一些主要区别如下:

tellp()tellg()
此函数与输出流一起使用,返回流中指针的当前 “put” 位置。此函数与输入流一起使用,返回流中指针的当前 “get” 位置。
语法: pos_type tellp();语法: pos_type tellg();
返回输出流中当前字符的位置。返回输入流中当前字符的位置。
tellp() 提供 put 指针的位置。tellg() 提供 get 指针的位置。
它返回一个 std::streampos 类型的值,表示 put 点的位置。它返回一个 std::streampos 类型的值,表示 get 指针的位置。
它与文件写入或不同的输出流等输出函数相关联。它与从文件或其他流读取数据等输入函数相关联。