std::basic_istream<CharT,Traits>:: operator>>
|
basic_istream
&
operator
>>
(
unsigned
short
&
value
)
;
|
(1) | |
|
basic_istream
&
operator
>>
(
unsigned
int
&
value
)
;
|
(2) | |
|
basic_istream
&
operator
>>
(
long
&
value
)
;
|
(3) | |
|
basic_istream
&
operator
>>
(
unsigned
long
&
value
)
;
|
(4) | |
|
basic_istream
&
operator
>>
(
long
long
&
value
)
;
|
(5) | (自 C++11 起) |
|
basic_istream
&
operator
>>
(
unsigned
long
long
&
value
)
;
|
(6) | (自 C++11 起) |
|
basic_istream
&
operator
>>
(
float
&
value
)
;
|
(7) | |
|
basic_istream
&
operator
>>
(
double
&
value
)
;
|
(8) | |
|
basic_istream
&
operator
>>
(
long
double
&
value
)
;
|
(9) | |
|
basic_istream
&
operator
>>
(
bool
&
value
)
;
|
(10) | |
|
basic_istream
&
operator
>>
(
void
*
&
value
)
;
|
(11) | |
|
basic_istream
&
operator
>>
(
short
&
value
)
;
|
(12) | |
|
basic_istream
&
operator
>>
(
int
&
value
)
;
|
(13) | |
|
basic_istream
&
operator
>>
(
/* 扩展浮点类型 */
&
value
)
;
|
(14) | (自 C++23 起) |
|
basic_istream
&
operator
>>
(
std::
ios_base
&
(
*
func
)
(
std::
ios_base
&
)
)
;
|
(15) | |
|
basic_istream
&
operator
>>
(
std::
basic_ios
<
CharT, Traits
>
&
( * func ) ( std:: basic_ios < CharT, Traits > & ) ) ; |
(16) | |
|
basic_istream
&
operator
>>
(
basic_istream
&
(
*
func
)
(
basic_istream
&
)
)
;
|
(17) | |
|
basic_istream
&
operator
>>
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(18) | |
从输入流中提取值。
-
若
lval
<
std::
numeric_limits
<
short
>
::
min
(
)
,则设置
failbit并将 std:: numeric_limits < short > :: min ( ) 存入 val 。 -
否则,若
std::
numeric_limits
<
short
>
::
max
(
)
<
lval
,则设置
failbit并将 std:: numeric_limits < short > :: max ( ) 存入 val 。 - 否则,将 static_cast < short > ( lval ) 存入 val 。
-
若
lval
<
std::
numeric_limits
<
int
>
::
min
(
)
,则设置
failbit并将 std:: numeric_limits < int > :: min ( ) 存入 val 。 -
否则,若
std::
numeric_limits
<
int
>
::
max
(
)
<
lval
,则设置
failbit并将 std:: numeric_limits < int > :: max ( ) 存入 val 。 - 否则,将 static_cast < int > ( lval ) 存入 val 。
FP
:
-
若
/* 扩展浮点类型 */
的
浮点转换等级
小于等于
float
,则
FP为 float 。 -
否则,若
/* 扩展浮点类型 */
的浮点转换等级小于等于
double
,则
FP为 double 。 -
否则,
FP为 long double 。
FP
值
fval
。随后:
-
若
fval
<
-
std::
numeric_limits
<
/* extended-floating-point-type */
>
::
max
(
)
,则设置
failbit并将 - std:: numeric_limits < /* extended-floating-point-type */ > :: max ( ) 存入 val 。 -
否则,若
std::
numeric_limits
<
/* extended-floating-point-type */
>
::
max
(
)
<
fval
,则设置
failbit并将 std:: numeric_limits < /* extended-floating-point-type */ > :: max ( ) 存入 val 。 - 否则,将 static_cast < /* extended-floating-point-type */ > ( fval ) 存入 val 。
-
- 输入序列出现文件结束;
- 输出序列插入失败(此时待插入字符不会被提取);
-
发生异常(此时会捕获异常,仅当未插入任何字符且
exceptions()中启用failbit时重新抛出)。
如果提取失败(例如在需要数字的位置输入了字母),则向
value
写入零值并设置
failbit
。对于有符号整数,若提取结果超出
value
可容纳的范围,将分别写入
std::
numeric_limits
<
T
>
::
max
(
)
或
std::
numeric_limits
<
T
>
::
min
(
)
并设置
failbit
标志位。对于无符号整数,若提取结果超出
value
可容纳的范围,将写入
std::
numeric_limits
<
T
>
::
max
(
)
并设置
failbit
标志位。
目录 |
参数
| value | - | 用于存储提取值的整数或浮点数引用 |
| func | - | I/O 操纵器函数指针 |
| sb | - | 用于写入所有数据的流缓冲区指针 |
返回值
注释
对于重载 ( 14 ) ,当扩展浮点类型的浮点转换等级不等于任何标准浮点类型的等级时,转换过程中的双重舍入可能导致结果不准确。在需要最大精度的场景中,可使用 std::from_chars() 。
示例
#include <iomanip> #include <iostream> #include <sstream> int main() { std::string input = "41 3.14 false hello world"; std::istringstream stream(input); int n; double f; bool b; stream >> n >> f >> std::boolalpha >> b; std::cout << "n = " << n << '\n' << "f = " << f << '\n' << "b = " << std::boolalpha << b << '\n'; // 使用 streambuf 重载提取剩余内容 stream >> std::cout.rdbuf(); std::cout << '\n'; }
输出:
n = 41 f = 3.14 b = false hello world
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用版本 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 64 | C++98 |
重载
(18)
是否仅能重新抛出通过调用
setstate
(
failbit
)
引发的 std::ios_base::failure 异常存在歧义 |
所有捕获的异常
均可被重新抛出 |
| LWG 118 | C++98 |
重载
(12,13)
将提取操作委托给
num_get::get
,
但该函数没有针对 short 和 int 的重载版本 |
提取的是
long
值
而非 short 或 int 值 |
| LWG 413 | C++98 |
重载
(18)
仅重新抛出从
sb
提取字符时抛出的异常,
但字符实际是从 * this 提取的 |
将 sb 修正为 * this |
| LWG 567 | C++98 |
由于
LWG 60
的解决方案,重载
(18)
表现为 FormattedInputFunction |
其行为表现为
UnformattedInputFunction |
| LWG 661 | C++98 |
由于
LWG 118
的解决方案,重载
(12,13)
未将提取的数字存储到 value 中 |
若无溢出发生
则存储该数字 |
| LWG 696 | C++98 | 提取失败时 value 保持不变 |
设置为零或最小/
最大值 |
参见
|
提取字符和字符数组
(函数模板) |
|
|
对字符串执行流输入和输出操作
(函数模板) |
|
|
对位集执行流输入和输出操作
(函数模板) |
|
|
序列化和反序列化复数
(函数模板) |
|
|
(C++11)
|
对伪随机数引擎执行流输入和输出操作
(函数模板) |
|
(C++11)
|
对伪随机数分布执行流输入和输出操作
(函数模板) |
|
提取字符块
(公开成员函数) |
|
|
提取已可用的字符块
(公开成员函数) |
|
|
提取字符
(公开成员函数) |
|
|
提取字符直到找到指定字符
(公开成员函数) |
|
|
(C++17)
|
将字符序列转换为整型或浮点型值
(函数) |