在我看来,定义运算符(运算符<)要直接使用字符串比使用ostringstreams然后转换回字符串更优雅。有没有一个原因,为什么c + +不开箱即用?为什么字符串类没有预定义<<运算符(运算符<<),以便字符串像ostringstream一样工作?
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
template <class T>
string& operator<<(string& s, T a) {
ostringstream ss;
ss << a;
s.append(ss.str());
return s;
}
int main() {
string s;
// this prints out: "inserting text and a number(1)"
cout << (s << "inserting text and a number (" << 1 << ")\n");
// normal way
ostringstream os;
os << "inserting text and a number(" << 1 << ")\n";
cout << os.str();
}
好,那你必须实现所有的操纵(你知道,你用来设置字段宽度的小功能)重新开始。代码重复是一个可怕的浪费。 – 2013-02-10 07:04:02
此外,使用新的C++ 11标准,它不是一个问题,因为您可以将['operator +'](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B)与['的std :: to_string'](http://en.cppreference.com/w/cpp/string/basic_string/to_string)。 – 2013-02-10 07:06:11