我一直想知道并且从未找到令人满意的解释来解释为什么会
std::string str = 50;
cout << str
给你垃圾或不编译
和
std::ostringstream str << 50;
cout << str // or str.str()
作品。
阻止 std::string 从整数和类整数类型实现转换运算符的继承限制是什么?
我想写这个问题有错误,第一种情况是:
std::string str;
str = 50;
出于某种让我无法理解的原因,该标准确实有一个赋值运算符,允许将单个赋值char
给 a std::string
,因此这将创建一个空字符串,并将其值设置为包含数值为 50 的单个字符。
std::string str = 50;
这不应该编译。basic_string
没有来自单个的构造函数int
。您的实施有缺陷。basic_string
不执行从任何其他类型到字符串的任何转换——它只处理字符串。
std::ostringstream str << 50;
这执行从 50 到“50”的转换,然后输出。stringstream
旨在从其他类型转换为文本。
有几种方法可以将整数转换为字符串,但你提到的方式是错误的。
看下面,C++/STL:
ostringstream
to_string
C:
sprintf