Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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
为什么我们不能为字符串指定字符? 在C++中,我注意到如果我做了一个字符串STR =“KLS”;,则无法写入字符串s1=str[0] 我不得不写: string s1; s1=str[0];_C++_String_Constructor_Char_Initialization - Fatal编程技术网

为什么我们不能为字符串指定字符? 在C++中,我注意到如果我做了一个字符串STR =“KLS”;,则无法写入字符串s1=str[0] 我不得不写: string s1; s1=str[0];

为什么我们不能为字符串指定字符? 在C++中,我注意到如果我做了一个字符串STR =“KLS”;,则无法写入字符串s1=str[0] 我不得不写: string s1; s1=str[0];,c++,string,constructor,char,initialization,C++,String,Constructor,Char,Initialization,为什么会这样?原因是类std::string没有接受类型为char的单个参数的构造函数。虽然有一个复制赋值运算符,它接受单个字符作为参数 basic_string& operator=(charT c); 你可以写 std::string s1( 1, str[0] ); 或(使用了初始化列表构造函数) 或 我想部分问题是为什么s1=str[0]有效,但字符串s1=str[0]不是那项决定背后的动机是什么?有没有理由让赋值只接受一个字符而不接受一个构造函数?@Evg我不能确切地说,但

为什么会这样?

原因是类
std::string
没有接受类型为
char
的单个参数的构造函数。虽然有一个复制赋值运算符,它接受单个字符作为参数

basic_string& operator=(charT c);
你可以写

std::string s1( 1, str[0] );
或(使用了初始化列表构造函数)


我想部分问题是为什么
s1=str[0]有效,但
字符串s1=str[0]不是那项决定背后的动机是什么?有没有理由让赋值只接受一个字符而不接受一个构造函数?@Evg我不能确切地说,但它似乎与接受一个分配器类型参数的构造函数存在歧义。您可以将
char
赋值给
std::string
;这正是
s1=str[0]
所做的。您不能做的是从一个单独的
char
构造一个
std::string
。不要把创建对象和修改对象混为一谈。
std::string s1 = { str[0] };
std::string s1 = { str, 0, 1 };