在C++中,指针是原始类型吗?

6

我对std::string的最后一个构造函数有些疑惑,它在这里被提到:链接。它的描述如下:

template<class InputIterator> string (InputIterator begin, InputIterator end);

如果InputIterator是整数类型,则通过将begin和end强制转换为调用它的第六个构造函数版本(就在此上面)来表现出来:
string(static_cast<size_t>(begin),static_cast<char>(end));

在其他情况下,参数将被视为迭代器,并且内容将用从迭代器开始指向的元素到迭代器结束前一个元素所表示的元素值进行初始化。
如果 InputIteratorchar *,那么这意味着什么?
编辑:好吧,我的错。我刚刚意识到文档中说的是整型类型而不是原始类型,因此该问题不适用于该示例。但是,指针是否为原始类型?
3个回答

9

C++没有“基本”类型的概念;整数是基本类型,指针是复合类型。

在这种情况下,char*不能转换为size_tchar,因此它将被视为InputIterator模板参数。


0
char * str = "Some string";
std::string s(str, str+6); // s = "Some s";

0

C++指针非常好地实现了InputIterator的概念(毕竟STL迭代器是C++指针的泛化)。因此,这两个参数被视为指向char数组的指针,用于指定初始化字符串所需的第一个和“超出末尾”的元素。


InputIterator可以是std::list迭代器,它并不构成指向任何数组的指针。 - CMircea
@iconiK:我并没有写过InputInterator是数组内的所有指针,我写的是数组内的指针满足了InputIterator(实际上是双向迭代器)的所有要求,并且这不是偶然的。事实上,双向迭代器被设计成是数组内指针行为的抽象。 - AProgrammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接