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 (на стадии 3num_put::put()) -
operator<<(basic_ostream&, char)иoperator<<(basic_ostream&, char*) -
operator<<(basic_ostream&, basic_string&) -
std::put_money(внутриmoney_put::put()) -
std::quoted(при использовании с потоком вывода)
Точные эффекты этого модификатора на ввод и вывод различаются в зависимости от отдельных функций ввода-вывода и описываются на каждой странице перегрузки операторов << и операторов >> индивидуально.
Пример
#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++.
| DR | Применяется к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| 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/w/cpp/io/manip/setw