4

更多的是一个好奇的问题,但实际上是否可以将通过的任何内容传递cin给函数而不必浪费变量?

4

4 回答 4

7

您可以轻松地定义一个包装函数来执行此操作。

template<class T>
T get(std::istream& is){
  T result;
  is >> result;
  return result;
}

任何体面的编译器都会使用 NRVO 来消除副本。

你可以像这样使用它

f(get<int>(std::cin));

确保不要在一个语句中多次使用它。如果您执行此类操作,则未指定流操作的顺序。

f(get<int>(std::cin),get<int>(std::cin));

您可以按任意顺序获得这两个整数。

于 2012-10-23T12:21:11.630 回答
2

cin只是一个流,它没有任何魔法。您可以使用其他流方法来做任何您想做的事情。

查看http://www.cplusplus.com/reference/iostream/

于 2012-10-23T10:57:03.323 回答
0

你的问题的答案是否定的。为了通过流输入一些东西,你将不得不“浪费”一个变量。您不能将输入数据直接传递给没有中间变量的函数。

于 2012-10-23T10:55:09.313 回答
0

当然:

f(*std::istream_iterator<T>(std::cin));

不过,这可能并不比使用变量更简单,而且如果流无法提供T.

于 2019-06-19T06:29:49.223 回答