二元操作符重载原语的字符串类

Binary operator-overloading string-class for primitives

本文关键字:字符串 原语 重载 二元操作符      更新时间:2023-10-16

我有一个关于std::string类的简单问题。

为什么不为原语重载+以便字符串可以轻松连接?

例如-如果我有一个双精度

double d = 1000.5:

和字符串

std::string s = "my value is ";

我想以一种简单的方式将这个字符串与双精度连接起来

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方式"进行连接,则会简单得多。

你可以很容易地实现它。

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);
} 

这很容易做到,没有所有的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);

格式很快变得复杂-例如,在世界上的某些地方,数字应该看起来像"1000,5"。因此,stringstream可用于格式化输出,string仅处理简单的字符串操作,包括字符串连接。