二元运算符重载基元的字符串类

时间:2014-06-15 18:01:03

标签: c++ string operator-overloading string-concatenation

我有一个关于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”中的连接则会更简单。

3 个答案:

答案 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只处理简单的字符串操作,包括字符串连接。