Я изучаю C ++ и время от времени сталкиваюсь с чем-то вроде «сопутствующих типов» или каким-то «машинно-зависимым целочисленным типом», который используется в разных случаях, например:
vector<int>::size_type
или же
std::size_t
или в последнее время я читал о типах и объектах ввода-вывода и читал о типе, который «определяется классами ввода-вывода», например:
istream::iostate
это, по-видимому, интегральный тип, используемый какими-то битовыми шаблонами, используемыми для указания состояния объекта потока.
Я знаю, что классы могут включать (помимо функций-членов и членов-данных) члены типа в форме объявлений псевдонимов типов (typedef
а также using
объявление псевдонима), но для меня это не имеет смысла полностью, должно быть что-то, о чем я еще не читал.
Можете ли вы объяснить, пожалуйста?
большое спасибо!
Если в стандарте не указан точный тип чего-либо, а только его поведение, то реализация должна решить, как они хотят с этим справиться.
Например, скажем, что стандарт говорит, что должен быть класс Foo
это также имеет foo_t
, это foo_t
требуется, чтобы иметь возможность представлять некоторый диапазон интегральных значений, но это не означает, что они должны быть фиксированного размера (например, std::int32_t
). В своей реализации я мог бы просто сказать
class Foo
{
public:
using foo_t = long;
};
Тогда пользователям этого класса не нужно будет знать, что foo_t
на самом деле long
они не должны зависеть от того, что верно для всех компиляторов (так как другие могут решить реализовать это по-разному). Они просто знают, что foo_t
способен хранить некоторый диапазон интегральных значений, основываясь на том, что говорит стандарт C ++.
int main()
{
Foo::foo_t x = 10;
std::cout << x;
}