Непосредственно захват Cin без переменной

Больше вопрос любопытства, чем что-либо еще, но возможно ли на самом деле пройти то, что проходит cin к функции без необходимости тратить переменную?

3

Решение

Вы можете легко определить функцию-обертку для этого.

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

Вы можете получить два целых в любом порядке.

4

Другие решения

cin это просто поток, в нем нет никакой магии. Вы можете использовать другие методы потока, чтобы делать все, что вы хотите.

Проверять, выписываться http://www.cplusplus.com/reference/iostream/

2

Ответ на ваш вопрос отрицательный. Чтобы что-то вводить через поток, вам придется «тратить» переменную. Вы не можете передать входные данные непосредственно в функцию без промежуточной переменной.

0

Может быть сделано начиная с C ++ 17 с использованием оператора инициализации и оператора запятой:

switch (int n; std::cin >> n, n) {
...
}
0