为什么我们不能将char赋值给字符串?

3
在 C++ 中,我注意到如果我创建一个字符串 string str="kls";,那么我不能写成 string s1=str[0];。相反,我必须写成:
string s1;
s1=str[0];

为什么呢?


你可以将一个 char 赋值给一个 std::string,这正是 s1=str[0] 所做的。但你不能仅凭一个 char 构造一个 std::string。不要混淆创建对象和修改对象。 - Pete Becker
1个回答

1
原因是类std::string没有接受单个char类型参数的构造函数,但有一个接受单个字符的复制赋值运算符。
basic_string& operator=(charT c);

你可以写

std::string s1( 1, str[0] );

或者(这里使用初始化列表构造函数)
std::string s1 = { str[0] };

或者

std::string s1 = { str, 0, 1 };

我认为问题的一部分是为什么s1=str[0];可以工作,但string s1=str[0];不行。 - 463035818_is_not_a_number
那个决定背后的动机是什么?有没有理由拥有一个接受单个字符但没有构造函数的赋值操作符? - Evg
1
@Evg 我不能确定,但似乎接受分配器类型的一个参数的构造函数存在歧义。 - Vlad from Moscow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接