为什么我们不能为字符串指定字符? 在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 };