cin в условии с объявлением переменой

новичок в c++. При чтении гугловского стайлгайда увидел объявление переменных в условиях:

while (const char* p = strchr(str, '/')) str = p + 1;

и теперь задаюсь вопросом как к такому виду можно привести такой код:

int a;
while (std::cin >> a) {
    ...
}

Первой мыслю было сделать что-то вроде такого, но оно не сработало:

while (std::cin >> int a) {
    ...
}

Ответы (2 шт):

Автор решения: HolyBlackCat

В if можно так: if (int a; std::cin >> a).

В while это не работает (в условии там нельзя писать ;), поэтому скорее всего никак нельзя.

Можно использовать for, вот так: for (int a; std::cin >> a;)

→ Ссылка
Автор решения: ComeInRage

С чистым std::cin вы вряд ли сможете сделать нечто подобное. Однако у вас всегда есть std::cin::get(), который возвращает один или несколько символов из потока ввода. И его можно использовать вот так:

while(char c = std::cin.get()) {
    // Выведет посимвольно весь текст из потока ввода
    std::cout << c << std::endl;
}

// Или так
char c;
while(std::cin.get(c)) {
    // Выведет посимвольно весь текст из потока ввода
    std::cout << c << std::endl;
}

Данный метод немного отличается от действия самого std::cin и его оператора >>, однако у него есть свои преимущества. Стоит помнить, что get() считывает лишь один символ, либо указанное в параметрах количество символов, а std::cin >> все, вплоть до первого пробела.

Важно:

Помните, что get возвращает код символа, который считал из потока ввода. Это означает, что если вы хотите считать int, то в int будут преобразовываться даже символы, согласно их кодам ASCII:

// При вводе Hello выведет:
//72 101 108 108 111 10
while(int i = std::cin.get()) {
    std::cout << i << std::endl;
}

std::cin >> же от таких случаев застрахован посредством входа в состояние отказа. Подробнее можно почитать в документации на cppreference. Так что вам нужно выбирать тот способ, который вам подойдет лучше

→ Ссылка