字符串"伴侣类型"

时间:2017-01-04 19:24:02

标签: c++ string

一本书讨论string::size_type(这是string.size()类的std::string函数的返回类型。)

我不明白这些"伴侣类型是什么"。有人能给我一个详细的解释吗?我们怎样才能访问它们?我们怎样才能在课堂上创造它们?我听说他们是某种类型的别名,怎么样?我无法在网上找到任何这些信息。

2 个答案:

答案 0 :(得分:3)

std::string类型 - 以及其他序列容器 - 具有一堆关联类型。例如,有string::iterator,这种类型可以迭代字符串中的字符。

类型string::size_type是某种能够保持字符串大小的类型。您可以通过写下这样的内容来使用它:

string::size_type size = myString.size(); // Or something else

在常规编程实践中看到人们实际使用此类型并不常见。大多数人只在这里使用size_tauto

string::size_type类型的原因在于,对序列容器起作用的模板函数可以接受模板参数,然后从中提取有用信息,如下所示:

template <typename Sequence> void doSomething(const Sequence& seq) {
    typename Sequence::size_type size = seq.size();
    ...
}

你可能不会很快就会做那样的事情,所以请随意使用size_t或类似的东西。

答案 1 :(得分:1)

Companion types可能只是提及member types的比喻方式,即在另一种类型中声明的类型

例如,string包含一大堆size_type

你是对的,它们是用typedefusing创建的类型别名(自c ++ 11起)

例如,foo有两种companion类型,但由于可见性,用户只能访问一种

class foo
{
public:
    using bar = int;
private:
    struct internal { /* impl */};
    ...
    typedef internal baz;
}

任何人现在都可以实例化foo::bar类型的变量,并且还允许foo(或std::string)的作者稍后更改成员类型,而无需您重写代码,只要您使用它们一贯