Разные типы параметров у std::ios_base::width и std::setw

99
09 ноября 2021, 10:40

Почему потоковый width для изменения принимает параметр типа std::streamsize, в то время как манипулятор setw принимает простой int? Насколько я понимаю, они делают одно и то же, а значит, и типы параметров должны быть одни.

Answer 1

Допустим у меня есть проект про гидропонику. Для выращивании растений важна температура, и она фигурирует почти везде(например датчики температур). Следовательно я должен выразить что такое температура. Обычно мы выражаем это числом( столько то градусов по цельсий), поэтому я ее без проблем могу определять так(хоть и для тепературы достаточно и байта):

using Temperature = long; //мое право

а потом написать класс датчика:

class Sensor {
    std::vector<Temperature> v;
    Temperature max;
public: 
    //...
    void push(const Temperature t) { v.push_back(t); }
    void set_max_temperature(const Temperature max_t)
    {
        max = max_t;
    }
    //...
};

Таким образом я сделал понятным свой код и для себя и для пользователей, что мой класс имеет дело с температурой. Если я вместо Temperature использовал бы long, то никто не понел бы что я имел ввиду(может это количество дырок в кармане или что то еще...).

В файле <iostream>, по такой же логике, введен беззнаковый тип std::streamsize. Он может быть определен например так:

using streamsize = long long;

А манипулятор потока setw определен в другом файле. Это просто функция, возвращающая манипулятор, для которого перегружены операторы ввода и вывода, и она может принимать любой тип, который без потери может неявно преобразоваться в std::streamsize. Это может быть в том числе и int, постольку поскольку в манипулятор мы передает количество... Но, насколько я знаю, она принимает какраз таки std::streamsize, просто мы можем спокойно туда передать любой целочисленный тип, в том числе и int

Answer 2

это ошибка cppreference на деле везде streamsize

READ ALSO
default initialization для std::vector

default initialization для std::vector

Можно ли как-то проинициализировать n элементов std::vector<int> по-умолчанию, те

82
Работа с файлами (считывание и запись)

Работа с файлами (считывание и запись)

Надо при помощи генератора случайных чисел сформировать 10 чисел в файлеНайти сумму максимального и минималного числа в файле

104
Использование javascript вместо typescript в angular

Использование javascript вместо typescript в angular

Есть ли возможность запускать js код в файлеts? Ибо когда копирую свой js код и вставляю в файл

248
Ошибка JS &quot;Uncaught TypeError: Cannot read property &#39;classList&#39; of null &quot;

Ошибка JS "Uncaught TypeError: Cannot read property 'classList' of null "

Помогите пожалуйста! Пишу тетрис на JS и все время выдает ошибку! Я новичок, поэтому не пинайте за мой код

105