std::setw
Объявлено в заголовочном файле <iomanip> | ||
|---|---|---|
/* unspecified */ setw( int n ); |
При использовании в выражении out << std::setw(n) или in >> std::setw(n) устанавливает параметр width потока out или in в значение, равное n.
Некоторые операции сбрасывают ширину в ноль (см. примечания ниже), поэтому для установки ширины перед несколькими операциями может потребоваться многократно вызывать std::setw.
Параметры
| n | - | новое значение ширины |
Возвращаемое значение
Объект типа, не указанного явно, такой, что
- если
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)
{
// set width
str.width(n);
}
Примечания
Свойство ширины потока сбрасывается в ноль (что означает «не задано»), если вызывается любая из следующих функций:
- Ввод
- Вывод
- Перегрузки
basic_ostream::operator<<(), принимающие арифметические типы или указатели void (на этапе 3 функцииnum_put::put()) -
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 << "no setw: [" << 42 << "]\n"
<< "setw(6): [" << std::setw(6) << 42 << "]\n"
<< "no setw, several elements: [" << 89 << 12 << 34 << "]\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] no setw, several elements: [891234] setw(6), several elements: [89 1234] Input from "hello, world" with setw(6) gave "hello"
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 183 | C++98 |
setw можно было использовать только с потокамитипа std::ostream или std::istream | можно использовать с любым символьным потоком |
См. также
| управляет шириной поля (открытая функция-член std::ios_base) |
|
| изменяет символ заполнения (шаблон функции) |
|
| задаёт расположение символов заполнения (функция) |
|
| управляет отображением префикса, указывающего основание системы счисления (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/manip/setw