Больше вопрос любопытства, чем что-либо еще, но возможно ли на самом деле пройти то, что проходит cin
к функции без необходимости тратить переменную?
Вы можете легко определить функцию-обертку для этого.
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));
Вы можете получить два целых в любом порядке.
cin
это просто поток, в нем нет никакой магии. Вы можете использовать другие методы потока, чтобы делать все, что вы хотите.
Проверять, выписываться http://www.cplusplus.com/reference/iostream/
Ответ на ваш вопрос отрицательный. Чтобы что-то вводить через поток, вам придется «тратить» переменную. Вы не можете передать входные данные непосредственно в функцию без промежуточной переменной.
Может быть сделано начиная с C ++ 17 с использованием оператора инициализации и оператора запятой:
switch (int n; std::cin >> n, n) {
...
}