Другие ответы, использующие потоки, будут успешными, даже если строка содержит недопустимые символы после действительного числа, например, "123abc". Я не знаком с бустом, поэтому не могу комментировать его поведение.
Если вы хотите знать, содержит ли строка число и только число, вы должны использовать strtol:
#include <iostream>
#include <string>
int main(void)
{
std::string s;
std::cin >> s;
char *end;
long i = strtol( s.c_str(), &end, 10 );
if ( *end == '\0' )
{
// Success
}
else
{
// Failure
}
}
strtol возвращает указатель на символ, который закончил синтаксический анализ, поэтому вы можете легко проверить, была ли проанализирована вся строка.
Обратите внимание, что strtol возвращает long, а не int, но в зависимости от вашего компилятора они, вероятно, совпадают. В стандартной библиотеке нет функции strtoi, только atoi, которая не возвращает символ конца разбора.