# std::setw

< cpp‎ | io‎ | manip

定义于头文件 `<iomanip>` |  |
/*unspecified*/ setw( int n ); |  |

用于表达式 out << setw(n) 或 in >> setw(n) 时，设置流 `out` 或 `in` 的 `width` 参数准确为 `n` 。

### 参数

n | - | width 的新值

### 返回值

返回未指定类型对象，满足若 `str` 是 std::basic_ostream<CharT, Traits> 或 std::basic_istream<CharT, Traits> 类型流的名称，则表达式 str << setw(n) 或 str >> setw(n) 表现为如同执行下列代码：

str.width(n);

### 注意

若调用任何下列函数，则流的宽度属性将被设为零（表示“不指定”）：

- 输入

  - `operator>>(basic_istream&, basic_string&)`
  - `operator>>(basic_istream&, char*)`

- 输出

  - `basic_ostream::operator<<()` 的重载 1-7 （在 `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 （以输出流使用时）

此修改器在输入与输出上的准确效果在单独的 I/O 函数间有别，单独地描述于每个 `operator<<` 各 `operator>>` 重载的页面。

### 示例

    #include <sstream>
    #include <iostream>
    #include <iomanip>

    int main()
    {
        std::cout << "no setw:" << 42 << '\n'
                  << "setw(6):" << std::setw(6) << 42 << '\n'
                  << "setw(6), several elements: " << 89 << std::setw(6) << 12 << 34 << '\n';
        std::istringstream is("hello, world");
        char arr[10];
        is >> std::setw(6) >> arr;
        std::cout << "Input from \"" << is.str() << "\" with setw(6) gave \""
                  << arr << "\"\n";
    }

输出：

    no setw:42
    setw(6):    42
    setw(6), several elements: 89    1234
    Input from "hello, world" with setw(6) gave "hello"

### 参阅

width | 管理域的宽度 (`std::ios_base` 的公开成员函数)
setfill | 更改填充字符 (函数模板)
internal left right | 设置填充字符的布置 (函数)