std::atoi, std::atol, std::atoll
Defined in header <cstdlib>
|
||
int atoi( const char* str ); |
(1) | |
long atol( const char* str ); |
(2) | |
long long atoll( const char* str ); |
(3) | (since C++11) |
Interprets an integer value in a byte string pointed to by str. The implied radix is always 10.
Discards any whitespace characters until the first non-whitespace character is found, then takes as many characters as possible to form a valid integer number representation and converts them to an integer value. The valid integer value consists of the following parts:
- (optional) plus or minus sign
- numeric digits
If the value of the result cannot be represented, i.e. the converted value falls out of range of the corresponding return type, the behavior is undefined.
Contents |
[edit] Parameters
str | - | pointer to the null-terminated byte string to be interpreted |
[edit] Return value
Integer value corresponding to the contents of str on success.
If no conversion can be performed, 0 is returned.
[edit] Possible implementation
template<typename T> T atoi_impl(const char* str) { while (std::isspace(static_cast<unsigned char>(*str))) ++str; bool negative = false; if (*str == '+') ++str; else if (*str == '-') { ++str; negative = true; } T result = 0; for (; std::isdigit(static_cast<unsigned char>(*str)); ++str) { int digit = *str - '0'; result *= 10; result -= digit; // calculate in negatives to support INT_MIN, LONG_MIN,.. } return negative ? result : -result; } int atoi(const char* str) { return atoi_impl<int>(str); } long atol(const char* str) { return atoi_impl<long>(str); } long long atoll(const char* str) { return atoi_impl<long long>(str); } |
Actual C++ library implementations fall back to C library implementations of atoi
, atoil
, and atoll
, which either implement it directly (as in MUSL libc) or delegate to strtol/strtoll (as in GNU libc).