【问题标题】:What principle of presence std::getline in std::string? [closed]std::string 中存在 std::getline 的原则是什么? [关闭]
【发布时间】:2021-01-15 19:34:11
【问题描述】:

我特别想弄清楚 std::string 类从哪里获得方法 std::getline ?据说 std::string 的这个method is non-member functionoverloaded in std::string。但是 getline 存在的起点在哪里?将它放入 std::string 类的顺序是什么?这个方法是从某个地方继承来的,还是只是出现在无人区的 std::string 类文件中?和std::istreamgetline有关系吗? std 类的继承结构是否有一些明确的描述?考虑 std lib 的这种结构会很方便。遗产。也许它在某些文档中。吨。 c.

这里其实有两个问题:

  1. getline 出现的机制与继承等事物有关
  2. std继承结构的俯视图

谢谢!

【问题讨论】:

  • std::getline 是在<string> 头文件中声明的独立模板函数。
  • 标准库很少使用继承。 std::istream 有一个基类,但除此之外我已经想了一会儿才能找到一个例子
  • 我刚刚查看了从 CodeBlocks 右键按 #include 引导到的包含文件,并且只有 #include-s 和所有。为什么我在其中看不到 std::getline?或者它是一些专有的隐藏?
  • 在 cppreference 上,派生类在页面顶部附近有一个描述继承层次结构的图表。示例:std::fstream。也不是很多您习惯使用的名称是更长、更精确名称(可能是模板)的别名。
  • 标准库头文件会变得非常疯狂。我有点幸运。我正在使用的实现留下了一个方便的评论:#include <bits/localefwd.h> // For operators >>, <<, and getline.以帮助追踪getline

标签: c++ inheritance getline


【解决方案1】:

std::String 类在哪里

没有课程std::String。你可能打算写std::string 确实存在。

从哪里获取方法std::getline?

std::string 没有这样的成员函数。取而代之的是该名称的免费函数(模板)。

据说这个方法是std::String的非成员函数,在std::String中被重载了。

说这些是错误的。 std::getline 是一个非成员函数(模板),但它不是“std::String”。 C++11 中引入了一个重载 istream 参数的重载,但不是“in std::String”。

但是 getline 存在的起点在哪里?

std::getline 在标准头文件<string> 中定义。

将它放入 std::String 类的顺序是什么?

它不是“在std::String 类中”。

这个方法是从某个地方继承来的

没有。

和std::istream的getline有关系吗?

在 C++ 继承的意义上不是。但它们是共享相同名称并实现相同抽象概念的函数。一个读取任意长度的输入到可调整大小的std::string,另一个读取任意字符缓冲区,但最多只能达到恒定大小。

std类的继承结构有明确的描述吗?

是的。标准文档是指定哪些标准类保证继承哪些的权威来源。

【讨论】:

  • 是的,我在写std::String的时候完全马虎,当然是std::string了。谢谢你的修补。
猜你喜欢
  • 1970-01-01
  • 2018-12-03
  • 2019-06-28
  • 1970-01-01
  • 2013-09-10
  • 2011-10-08
  • 2020-03-28
  • 2019-05-06
  • 1970-01-01
相关资源
最近更新 更多