【问题标题】:C++ - What does it mean when a stream pointer is given as a function argument?C++ - 将流指针作为函数参数给出是什么意思?
【发布时间】:2016-02-18 18:11:15
【问题描述】:

我不熟悉 C++,所以很抱歉这是一个如此简单的问题。我正在做一项学校作业,在其中一个问题中,它要求我们使用以下原型编写一个函数

    void function_name(istream &in, ostream &out, other arguments);

我真的不知道前两个参数是什么意思。据我所知,如果我错了,请纠正我。 istream 是在输入中使用的类。 cin 是这个类的一个对象。 ostream 是用于输出的类。 cout 和 cerr 是此类的对象。 istream 类的对象具有诸如fail() 和.eof() 之类的方法来检测输入期间的错误。 ostream 类的对象具有 .width() 和 .precision() 等方法来帮助格式化输出。

所以根据我对问题的理解,前两个参数必须是指向 istream 和 ostream 对象的指针。谁能给我一个将 istream 和 ostream 对象指针作为参数的函数示例,以便我了解如何在我的问题中使用它们?

对不起,如果这太长了。 感谢您的帮助。

【问题讨论】:

  • 它们不是指针 (*),它们是引用 (&)。
  • 该死的。我总是把这两个弄混。这种情况有区别吗?
  • 重要的区别是指针可以是null,而引用是“保证”(某种程度上)是一个有效的对象。指针的调用约定也不同。有很多像这样的资源(programmers.stackexchange.com/questions/195337/…)可以详细解释它。强烈建议了解差异。

标签: c++ pointers iostream


【解决方案1】:

前两个参数必须是指向 istream 和 ostream 对象的指针

这是一个误解。这些参数是引用参数,而不是指针。

例子:

void foo(istream &in, ostream &out, int& x)
{
    in >> x;
    out << x;
}

int main()
{
   int x;

   // Read x from stdin and write to stdout
   foo(std::cin, std::cout, x);

   std::ifstream ifile("input.txt");
   std::ofstream ofile("output.txt");

   // Read x from input.txt and write to output.txt
   foo(ifile, ofile, x);
}

【讨论】:

  • 谢谢。我想澄清一下,添加像 foo(ifile, std::cout, x); 这样的行不会有任何问题。会有吗?
  • @ManyQuestions,应该没问题。
【解决方案2】:

第一件事,那些实际上是引用,而不是指针。 第二件事,你使用 in 和 out 就像你使用 std::cin 和 std::cout 一样。但是当您调用该函数时,您可以指定该函数将使用的不同流。例如,如果您希望函数写入文件“test.txt”而不是控制台,则声明 std::ofstream ofs ("test.txt", std::ofstream::out);,然后将其传递给函数。

此外,在处理流时,别忘了在完成后关闭它们。

【讨论】:

    【解决方案3】:

    那些是引用,而不是指针。谷歌差异。

    至于你的主要问题。您可以像对待 cincout 一样对待它们,分别从/向标准输入读取/写入。也就是说,使用&lt;&lt;&gt;&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多