我想知道std::string
提到here的最后一个构造函数。它说:
template<class InputIterator> string (InputIterator begin, InputIterator end);
如果InputIterator
是一个整数类型,则通过类型转换开始和结束来表现为第六个构造函数版本(正好在此之上):
string(static_cast<size_t>(begin),static_cast<char>(end));
在任何其他情况下,参数都被视为迭代器,并且内容被初始化,其中元素的值从迭代器引用的元素开始,直到迭代器引用的元素之前的元素。
那么,InputIterator
是char *
是什么意思呢?
编辑:好的,我的坏。我刚刚意识到它在文档中说的是整数类型,而不是原始类型,因此该问题不适用于该示例。但仍然是指针基元?
答案 0 :(得分:9)
C ++没有“原始”类型的概念;整数是基本类型,指针是复合类型。
在这种情况下,char*
无法转换为size_t
或char
,因此会将其视为InputIterator
模板参数。
答案 1 :(得分:0)
char * str = "Some string";
std::string s(str, str+6); // s = "Some s";
答案 2 :(得分:0)
C ++指针很好地实现了InputIterator的概念(毕竟,STL迭代器是C ++指针的概括)。因此,这两个参数被视为指向char数组的指针,指定初始化字符串所需的第一个和“一个过去结束”元素。