这里调用了哪个std :: string构造函数?

时间:2016-03-01 02:10:13

标签: c++ string

我正在尝试用C ++构造一个字符串,如下所示。

const char *cstring = "abcd";
const string cppstr = string(cstring, cstring + strlen(cstring));

这样工作正常,cppstr的值为“abcd”,即使它与标准中指定的任何字符串构造函数都不匹配。任何人都可以让我知道在这种特殊情况下调用字符串的构造函数。

1 个答案:

答案 0 :(得分:5)

有一个模板化构造函数,它将两个InputIterator作为输入。 (见the cppreference.org reference, constructor (6))。原始C ++指针满足InputIterators的所有要求(实际上,它们是RandomAccessIterators)。因此,请致电

string(cstring, cstring + strlen(cstring)

调用此构造函数。该构造函数通过迭代遍历迭代器描述的元素范围并将字符串构造为这些元素的副本来工作。

作为一个注释,你也可以写

const string cppstr{cstring, cstring + strlen(cstring)};

此处不是为cppstr分配值。