operator<<,>>(std::basic_string)
定义于头文件 <string>
|
||
template <class CharT, class Traits, class Allocator> std::basic_ostream<CharT, Traits>& |
(1) | |
template <class CharT, class Traits, class Allocator> std::basic_istream<CharT, Traits>& |
(2) | |
1) 表现为有格式输出函数 (FormattedOutputFunction) 。构造并检查 sentry 对象后,以如下方式确定输出格式填充:
- a) 若
str.size()
不小于os.width()
,则原样地使用范围[str.begin(), str.end())
- b) 否则,若 (os.flags() & ios_base::adjustfield) == ios_base::left ,则放置
os.width()-str.size()
个os.fill()
字符的副本到字符序列后 - c) 否则,放置
os.width()-str.size()
个os.fill()
字符副本到字符序列前
然后存储每个来自结果序列( str
的内容加上填充)到输出流 os
,如同通过调用 os.rdbuf()->sputn(seq, n) ,其中 n=std::max(os.width(), str.size())
最后,调用 os.width(0) 取消 std::setw 的效果,若存在。
2) 表现为有格式输入函数 (FormattedInputFunction) 。构造并检查 sentry 对象,这可能跳过前导空白符,然后首先以 str.erase() 清除 str
,然后从 is
读取字符并后附它们到 str
,如同用 str.append(1, c) ,直至下列条件之一变为真:
- 读取了
N
个字符,其中若is.width() > 0
则N
为is.width()
,否则N
为str.max_size()
- 流
is
中出现文件尾条件 - std::isspace(c,is.getloc()) 对
is
中的下个字符c
为 true (空白符留在输入流中)。
若未释出字符,则设置 is
上的 std::ios::failbit ,这可能抛出 std::ios_base::failure 。
最后,调用 is.width(0) 取消 std::setw 的效果,若存在。
异常
1) 若输出中抛出异常则可能抛出 std::ios_base::failure 。
2) 若未从 is
释出字符(例如流在文件尾或仅有空白符组成),或若输入中抛出异常则可能抛出 std::ios_base::failure 。
参数
os | - | 字符输出流 |
is | - | 字符输入流 |
str | - | 插入或释出的字符串 |
返回值
1) os
2) is
示例
#include <iostream> #include <string> #include <sstream> int main() { std::string greeting = "Hello, whirled!"; std::istringstream is(greeting); std::string hello_comma; is >> hello_comma; std::cout << greeting << '\n' << hello_comma << '\n'; }
输出:
Hello, whirled! Hello,