std::basic_istream<CharT,Traits>:: get
int_type get
(
)
;
|
(1) | |
basic_istream
&
get
(
char_type
&
ch
)
;
|
(2) | |
basic_istream
&
get
(
char_type
*
s,
std::
streamsize
count
)
;
|
(3) | |
basic_istream
&
get
(
char_type
*
s,
std::
streamsize
count, char_type delim
)
;
|
(4) | |
basic_istream
&
get
(
basic_streambuf
&
strbuf
)
;
|
(5) | |
basic_istream
&
get
(
basic_streambuf
&
strbuf, char_type delim
)
;
|
(6) | |
Extracts character or characters from stream.
All versions behave as UnformattedInputFunction s . After constructing and checking the sentry object, these functions perform the following:
- count is less than 1 or count - 1 characters have been stored.
- end of file condition occurs in the input sequence ( setstate ( eofbit ) is called).
-
the next available input character
c
equals
delim
, as determined by
Traits
::
eq
(
c, delim
)
. This character is not extracted (unlike
getline()
).
- end of file condition occurs in the input sequence.
- inserting into the output sequence fails (in which case the character that could not be inserted, is not extracted).
- the next available input character c equals delim , as determined by Traits :: eq ( c, delim ) . This character is not extracted.
- an exception occurs (in which case the exception is caught and not rethrown).
If no characters were extracted, calls setstate ( failbit ) .
All versions set the value of gcount() to the number of characters extracted.
Parameters
ch | - | reference to the character to write the result to |
s | - | pointer to the character string to store the characters to |
count | - | size of character string pointed to by s |
delim | - | delimiting character to stop the extraction at. It is not extracted and not stored |
strbuf | - | stream buffer to read the content to |
Return value
Exceptions
If an internal operation throws an exception, it is caught and
badbit
is set. If
exceptions()
is set for
badbit
, the exception is rethrown.
Example
#include <iostream> #include <sstream> int main() { std::istringstream s1("Hello, world."); char c1 = s1.get(); // reads 'H' std::cout << "after reading " << c1 << ", gcount() == " << s1.gcount() << '\n'; char c2; s1.get(c2); // reads 'e' char str[5]; s1.get(str, 5); // reads "llo," std::cout << "after reading " << str << ", gcount() == " << s1.gcount() << '\n'; std::cout << c1 << c2 << str; s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n' std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n'; }
Output:
after reading H, gcount() == 1 after reading llo,, gcount() == 4 Hello, world. After the last get(), gcount() == 7
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 370 | C++98 |
the effect of overload
(5)
was
get
(
s, count, widen
(
'
\n
'
)
)
,
which is the effect of overload (3) |
corrected to
get ( strbuf, widen ( ' \n ' ) ) |
LWG 531 | C++98 |
overloads
(3,4)
could not handle the
case where count is non-positive |
no character is
extracted in this case |
See also
extracts blocks of characters
(public member function) |
|
extracts formatted data
(public member function) |
|
extracts characters and character arrays
(function template) |