我有一个关于std :: string类的简单问题。
为什么原语不会重载+,以便可以很容易地连接字符串?
例如 - 如果我有一个双
double d = 1000.5:
一个字符串
std::string s = "my value is ";
我希望以简单的方式将此字符串与double连接
s = s + d;
结果应该是:
my value is 1000.5
这很容易用Java等语言进行。
public static void main (String[] args) {
double d = 1000.5;
String s = "my Value is ";
s += d;
System.out.println(s);
}
相反,这是如何在c ++
中执行此操作的示例int main() {
double d = 1000.5;
std::ostringstream strs;
strs << d;
std::string s = "My value is " + strs.str();
cout << s;
return 0;
}
它并不复杂,但如果允许“java-way”中的连接则会更简单。
答案 0 :(得分:2)
您可以轻松实现它。
template <typename T, typename = typename std::enable_if<std::is_arithmetic<T>::value>::type>
std::string& operator += (std::string& string, const T& number)
{
return string += std::to_string(number);
}
答案 1 :(得分:1)
如果没有所有stringstream
业务,这很容易做到。使用std::to_string
std::string s = "my value is " + std::to_string(d);
或者对于预C ++ 11编译器,可以使用boost::lexical_cast
std::string s = "my value is " + boost::lexical_cast<std::string>(d);
答案 2 :(得分:1)
格式化很快变得复杂 - 例如,在世界的某些地方,数字应该看起来像“1000,5”。因此stringstream
可用于格式化输出,string
只处理简单的字符串操作,包括字符串连接。