【问题标题】:Why cant we assign char to strings?为什么我们不能将 char 分配给字符串?
【发布时间】:2021-08-03 17:08:53
【问题描述】:

在 C++ 中,我注意到如果我创建了 string str="kls";,那么我就无法编写 string s1=str[0]; 我必须改写:

string s1;
s1=str[0];

为什么会这样?

【问题讨论】:

  • 可以char分配给std::string;这正是s1=str[0] 所做的。你不能做的是从一个单独的char构造一个std::string。不要混淆创建对象和修改对象。

标签: c++ string constructor char initialization


【解决方案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]; 无效
  • 这个决定背后的动机是什么?是否有理由进行一个需要单个字符但没有 ctor 的作业?
  • @Evg 我不能确切地说,但似乎与接受分配器类型的一个参数的构造函数存在歧义。
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多