Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类和模板伴随类型 我学习C++,时不时地碰到一些“同伴类型”或者一些“机器依赖的积分类型”,这些词在不同的场合使用,例如:。 vector<int>::size_type_C++_Types_Type Members - Fatal编程技术网

类和模板伴随类型 我学习C++,时不时地碰到一些“同伴类型”或者一些“机器依赖的积分类型”,这些词在不同的场合使用,例如:。 vector<int>::size_type

类和模板伴随类型 我学习C++,时不时地碰到一些“同伴类型”或者一些“机器依赖的积分类型”,这些词在不同的场合使用,例如:。 vector<int>::size_type,c++,types,type-members,C++,Types,Type Members,或者最近我读到了关于IO类型和对象的文章,我读到了一种“由IO类定义”的类型,例如: 这显然是一种整数类型,由某种位模式使用,用于指示流对象的状态 我知道类可以包括(除了成员函数和数据成员之外)类型成员,以类型别名声明的形式(typedef和使用别名声明),但这对我来说毫无意义,一定有一些我还没有读过的东西。 你能解释一下吗 非常感谢 如果标准没有指定某事物的确切类型,而只是指定其行为,则由实现决定如何处理它 例如,假设标准规定必须有一个类Foo,它也有一个Foo\t。这个foo\u t需要能够

或者最近我读到了关于IO类型和对象的文章,我读到了一种“由IO类定义”的类型,例如:

这显然是一种整数类型,由某种位模式使用,用于指示流对象的状态

我知道类可以包括(除了成员函数和数据成员之外)类型成员,以类型别名声明的形式(
typedef
使用
别名声明),但这对我来说毫无意义,一定有一些我还没有读过的东西。 你能解释一下吗


非常感谢

如果标准没有指定某事物的确切类型,而只是指定其行为,则由实现决定如何处理它

例如,假设标准规定必须有一个类
Foo
,它也有一个
Foo\t
。这个
foo\u t
需要能够表示一些整数值的范围,但它并没有说它们必须是固定大小的(比如)。在我的实现中,我可以说

class Foo
{
public:
    using foo_t = long;
};
这样,这个类的用户就不需要知道
foo\u t
实际上是一个隐藏的
long
,也不应该依赖于所有编译器都是这样(因为其他编译器可能会选择不同的实现方式)。他们只知道 Fuffyt能够根据C++标准所说的任何东西来保存整数值的范围。
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;
}