类和模板伴随类型 我学习C++,时不时地碰到一些“同伴类型”或者一些“机器依赖的积分类型”,这些词在不同的场合使用,例如:。 vector<int>::size_type
或者最近我读到了关于IO类型和对象的文章,我读到了一种“由IO类定义”的类型,例如: 这显然是一种整数类型,由某种位模式使用,用于指示流对象的状态 我知道类可以包括(除了成员函数和数据成员之外)类型成员,以类型别名声明的形式(类和模板伴随类型 我学习C++,时不时地碰到一些“同伴类型”或者一些“机器依赖的积分类型”,这些词在不同的场合使用,例如:。 vector<int>::size_type,c++,types,type-members,C++,Types,Type Members,或者最近我读到了关于IO类型和对象的文章,我读到了一种“由IO类定义”的类型,例如: 这显然是一种整数类型,由某种位模式使用,用于指示流对象的状态 我知道类可以包括(除了成员函数和数据成员之外)类型成员,以类型别名声明的形式(typedef和使用别名声明),但这对我来说毫无意义,一定有一些我还没有读过的东西。 你能解释一下吗 非常感谢 如果标准没有指定某事物的确切类型,而只是指定其行为,则由实现决定如何处理它 例如,假设标准规定必须有一个类Foo,它也有一个Foo\t。这个foo\u t需要能够
typedef
和使用
别名声明),但这对我来说毫无意义,一定有一些我还没有读过的东西。
你能解释一下吗
非常感谢 如果标准没有指定某事物的确切类型,而只是指定其行为,则由实现决定如何处理它 例如,假设标准规定必须有一个类
Foo
,它也有一个Foo\t
。这个foo\u t
需要能够表示一些整数值的范围,但它并没有说它们必须是固定大小的(比如)。在我的实现中,我可以说
class Foo
{
public:
using foo_t = long;
};
这样,这个类的用户就不需要知道foo\u t
实际上是一个隐藏的long
,也不应该依赖于所有编译器都是这样(因为其他编译器可能会选择不同的实现方式)。他们只知道int main()
{
Foo::foo_t x = 10;
std::cout << x;
}
intmain()
{
Foo::Foo_t x=10;
std::难道哪一部分对你来说没有意义吗?@Barry我不明白什么是“类定义伴生类型”。这意味着什么?一个类如何定义语言中内置类型之外的依赖于机器的整数类型?因此它们只是公共类型成员,只不过是内置类型的类型别名而已?基本上是的,尽管它们不需要是内置类型/基元的别名,但它们可以是另一个类的别名(例如)也许我有一个我定义的Bar
类,它是我出于某种原因制作的积分值的自定义表示,我可以用foo_t=Bar说,
@Luca,一般来说,是的(例如对于size_type
)。对于iostate
,不必是内置类型。标准允许它可能是枚举或位集
(或整数)。@Luca简言之,它们用于:抽象不相关的实现细节,并使代码更具可读性/可理解性(例如,使用索引
、标签
、大小
的代码比仅使用无符号长代码
的代码更容易理解)一般来说,它们是类型别名,用于抽象出如何定义类型的实现?因此,它们基本上是类型别名,不定义新类型(来自Java,我在这里考虑内部类…)
class Foo
{
public:
using foo_t = long;
};
int main()
{
Foo::foo_t x = 10;
std::cout << x;
}