Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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
这里调用的是哪个std::string构造函数? 我试图在C++中构造一个字符串,如下: const char *cstring = "abcd"; const string cppstr = string(cstring, cstring + strlen(cstring));_C++_String - Fatal编程技术网

这里调用的是哪个std::string构造函数? 我试图在C++中构造一个字符串,如下: const char *cstring = "abcd"; const string cppstr = string(cstring, cstring + strlen(cstring));

这里调用的是哪个std::string构造函数? 我试图在C++中构造一个字符串,如下: const char *cstring = "abcd"; const string cppstr = string(cstring, cstring + strlen(cstring));,c++,string,C++,String,这工作正常,cppstr的值为“abcd”,即使它与标准中指定的任何字符串构造函数都不匹配。任何人都可以告诉我在这种特殊情况下调用了哪个字符串构造函数。有一个模板构造函数,它将两个InputIterator作为输入。(见附件)。原始C++指针满足所有的请求者(实际上,它们是随机访问迭代器)。因此, string(cstring, cstring + strlen(cstring) 调用此构造函数。该构造函数通过在迭代器所描述的元素范围内进行迭代并构造一个字符串作为这些元素的副本来工作 作为说明

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

有一个模板构造函数,它将两个InputIterator作为输入。(见附件)。原始C++指针满足所有的请求者(实际上,它们是随机访问迭代器)。因此,

string(cstring, cstring + strlen(cstring)
调用此构造函数。该构造函数通过在迭代器所描述的元素范围内进行迭代并构造一个字符串作为这些元素的副本来工作

作为说明,你也可以只写

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

这里不是分配
cppstr
一个值。

甚至只是
const string cppstr{cstring}
@rici:如果我使用常量字符串cppstr(cstring),创建的字符串将包含“\0”。@kadina你确定吗?构造函数被设计为在碰到空终止符时立即停止。@rici:我记得我看到过。但是我会检查和更新。@ KADINA:C++字符串后面总是有一个NUL,但是NUL不是字符串的一部分。其目的是简化与C的互操作性(因此,在调用
C_str()
方法时,库不需要复制字符串。但可以验证(如果字符串不包含NUL),
s.size()
strlen(s.C_str())
完全相同。