代码之家  ›  专栏  ›  技术社区  ›  M2tM

为什么std::cin.getline没有一个oveloaded方法来获取std::string?

  •  5
  • M2tM  · 技术社区  · 14 年前

    cin.getline 以及 global getline 功能在不同的地方。

    //THESE TWO EXIST
    istream& cin::getline (char* s, streamsize n );
    istream& cin::getline (char* s, streamsize n, char delim );
    
    //THESE TWO COULD EXIST
    istream& cin::getline (string &s);
    istream& cin::getline (string &s, char delim );
    

    是不是因为其他类型的人可能想被添加,而他们不想将字符串与cin结合?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Community basarat    7 年前

    看我的答案 a similar question 。这可能是C++标准委员会的疏忽,但也可以用依赖关系来解释。如果标准要求 std::string <iostream> 头,那么它将要求实现者 #include<string> 在里面 <iostream> . 这是一个依赖性需求,这将进一步减慢编译任何需要 < --即使编译单元本身不需要 标准::字符串

    注意另一方面 <string> header的函数引用 std::basic_istream<> std::basic_ostream<> ;但标准还需要一个名为 <iosfwd> 哪个forward声明所有IO设施,使 <字符串> <丢失转发> 头球。相反,依赖项的编译速度要慢得多。

        2
  •  4
  •   Frédéric Hamidi    14 年前

    或多或少。”他们“可能不想 std::istream 依靠 std::string 无论如何,可能是为了最小化 coupling .

    请注意 std::getline() 定义在 <string>

        3
  •  0
  •   Community basarat    7 年前

    C++中有几个地方 标准委员会并不是真的 优化相互作用

    string及其在库中的应用 是其中之一。

    容器具有交换成员 已提供。同样的道理 标准:排序。

    我希望所有这些小事

    -Christopher

    加上这篇文章,我在另一篇文章中发现,因为它似乎是相关的,并接受一个答案。