Почему потоковый width для изменения принимает параметр типа std::streamsize, в то время как манипулятор setw принимает простой int? Насколько я понимаю, они делают одно и то же, а значит, и типы параметров должны быть одни.
Допустим у меня есть проект про гидропонику. Для выращивании растений важна температура, и она фигурирует почти везде(например датчики температур). Следовательно я должен выразить что такое температура. Обычно мы выражаем это числом( столько то градусов по цельсий), поэтому я ее без проблем могу определять так(хоть и для тепературы достаточно и байта):
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
это ошибка cppreference на деле везде streamsize
Сборка персонального компьютера от Artline: умный выбор для современных пользователей