c++ 直接将cin作为参数捕获到函数中,无需临时变量

wrrgggsh  于 2022-12-01  发布在  其他
关注(0)|答案(4)|浏览(162)

这是一个好奇心很强的问题,但是否真的可以将通过std::cin的任何内容作为参数传递给函数,而不定义一个临时变量来读取输入?
不使用额外的临时变量:

#include <iostream>
using namespace std;

string time; // extra define temporary variable for input 
// now 2 lines follow with separate operations
cin >> time; // 1) input to "time"
in_time = get_minutes (time); // 2) put "time" to function as parameter
cin >> time;  // another extra line
wake_up = get_minutes (time);
cin >> time;  // and another other extra line ....
opens = get_minutes (time);

我想直接在函数中使用std::cin参数:

#include <iostream>
using namespace std;

in_time = get_minutes (<use of cin here>);
wake_up = get_minutes (<use of cin here>);
opens = get_minutes (<use of cin here>);

这可能吗?

pb3s4cty

pb3s4cty1#

您可以轻松地定义一个 Package 函数来实现这一点。

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));

两个整数的顺序可以是任意的。

xmjla07d

xmjla07d2#

cin只是一个流,它没有任何魔力。你可以使用其他流方法来做任何你想做的事情。
checkout http://www.cplusplus.com/reference/iostream/

rt4zxlrg

rt4zxlrg3#

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

3zwjbxry

3zwjbxry4#

确定:

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

不过,这可能并不比使用变量 * 简单 *,而且如果流无法提供T,这是未定义的行为。

相关问题