将整数转换为字符串时std :: ostringstream vs std :: string

时间:2013-07-12 20:12:32

标签: c++ stl

我总是想知道,从来没有找到令人满意的解释为什么会

std::string str = 50;
cout << str

给你垃圾或不编译

std::ostringstream str << 50;
cout << str // or str.str()

作品。

什么是继承限制阻止std :: string从整数和整数类型实现转换运算符?

3 个答案:

答案 0 :(得分:2)

我想在写这个问题时有一个错误,第一个案例是:

std::string str;
str = 50;

由于某些原因让我感到厌烦,标准确实有一个赋值运算符,它允许将单个char赋值给std::string,这样就会创建一个空字符串,并设置它值包含一个数字值为50的单个字符。

答案 1 :(得分:0)

std::string str = 50;

这不应该编译。 basic_string没有来自单个int的构造函数。您的实施有缺陷。 basic_string不执行任何其他类型的字符串转换 - 它只处理字符串。

std::ostringstream str << 50;

执行从50到“50”的转换,然后输出。 stringstream 旨在将其他类型转换为文字。

答案 2 :(得分:-1)

有几种方法可以将整数转换为字符串 但你提到的方式是错误的。

看下面的, C ++ / STL:

ostringstream
to_string

C:

sprintf