Spec-Zone.ru › C++

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);
}

Примечания

Свойство ширины потока будет сброшено до нуля (что означает «неопределённо»), если вызваны следующие функции:

  • Ввод
    • operator>>(basic_istream&, basic_string&)
    • operator>>(basic_istream&, char*)
  • Вывод
    • Перегрузки 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 (при использовании с потоком вывода)

Точные эффекты этого модификатора на ввод и вывод различаются в зависимости от отдельных функций ввода-вывода и описываются на каждой странице перегрузки операторов << и операторов >> индивидуально.

Пример

#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
применим к любому
потоку символов

См. также

width
управляет шириной поля
(публичный член-функция std::ios_base)
setfill
изменяет символ заполнения
(функция-шаблон)
internalleftright
устанавливает расположение символов заполнения
(функция)
showbasenoshowbase
управляет тем, используется ли префикс для обозначения числовой системы счисления
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/manip/setw

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API