我正在学习C ++,偶尔会碰到像“伴侣类型”或某些“机器相关的整体类型”这样的东西,它们会在不同的场合使用,例如:
vector<int>::size_type
或
std::size_t
或者最近我正在阅读关于IO类型和对象的内容,我读到了一个“由IO类定义”的类型,例如:
istream::iostate
显然是某种用于指示流对象状态的位模式的整数类型。
我知道类可以包含(除了成员函数和数据成员之外)类型成员,类型为别名声明(typedef
和using
别名声明),但它没有意义对我来说,一定有一些我还没有读过的东西。
你能解释一下吗?
非常感谢!
答案 0 :(得分:5)
如果标准没有指定某些内容的确切类型,而只是指定它的行为,那么由实现决定他们想要如何处理它。
例如,假设标准表示必须有一个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;
}