std::setw
来自cppreference.com
在标头 <iomanip> 定义
|
||
/* 未指定 */ setw( int n ); |
||
用于表达式 out << std::setw(n) 或 in >> std::setw(n) 时,设置流 out 或 in 的 width
参数为 n。
有些操作会将宽度重置为零(见下文),所以需要为多个操作设置宽度时可能需要多次调用 std::setw
。
参数
n | - | width 的新值
|
返回值
一个满足以下条件但未指定类型的对象:
- 如果 out 是具有 std::basic_ostream<CharT, Traits> 类型的对象,那么表达式 out << setw(n):
- 具有 std::basic_ostream<CharT, Traits>& 类型
- 值为 out
- 行为如同调用 f(out, n)
- 如果 in 是具有 std::basic_istream<CharT, Traits> 类型的对象,那么表达式 in >> setw(n):
- 具有 std::basic_istream<CharT, Traits>& 类型
- 值为 in
- 行为如同调用 f(in, n)
其中函数 f 定义如下:
void f(std::ios_base& str, int n) { // 设置宽度 str.width(n); }
注意
如果调用了下列任何函数,那么流的宽度属性将被重置为零(表示“不指定”):
- 输入
- 输出
- basic_ostream::operator<<() 的接收算术类型和 void 指针的重载(在 num_put::put() 的阶段 3)
- operator<<(basic_ostream&, char) 和 operator<<(basic_ostream&, char*)
- operator<<(basic_ostream&, basic_string&)
- std::put_money (在 money_put::put() 内)
- std::quoted (以输出流使用时)
此修改器在输入与输出上的准确效果在每个输入/输出函数都会有不同,会在每个 operator<< 和 operator>> 重载的页面单独描述。
示例
运行此代码
#include <iomanip> #include <iostream> #include <sstream> int main() { std::cout << "没有 setw:[" << 42 << "]\n" << "setw(6):[" << std::setw(6) << 42 << "]\n" << "setw(6),并输出多个元素:[" << 89 << std::setw(6) << 12 << 34 << "]\n"; std::istringstream is("hello, world"); char arr[10]; is >> std::setw(6) >> arr; std::cout << "有 setw(6) 时从 \"" << is.str() << "\" 输入会得到 \"" << arr << "\"\n"; }
输出:
没有 setw:[42] setw(6):[ 42] setw(6),并输出多个元素:[89 1234] 有 setw(6) 时从 "hello, world" 输入会得到 "hello"
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 183 | C++98 | setw 只能用于具有 std::ostream 或 std::istream 类型的流
|
可以用于所有字符流 |
参阅
管理域的宽度 ( std::ios_base 的公开成员函数) | |
更改填充字符 (函数模板) | |
设置填充字符的布置 (函数) |