c++中从整数到字符串的转换中,左移操作符是做什么的?

what does the left shift operator do in converting from integer to string in c++

本文关键字:操作符 什么 左移 转换 整数 字符串 c++      更新时间:2023-10-16

假设你想把一个整数转换成字符串这是c++中的方法

    int c1=999;
    stringstream ss;
    ss<<c1;
    string str=ss.str();

如何在c++中转换成字符串?上面程序的第三行stringstream包含了什么在这个语句中我的意思是左移运算符(我们知道符号'<<'是用来左移的)在这里是做什么来转换成字符串

要将整型转换为字符串(非常基本),您必须遍历所有数字,将其转换为常规字符,并将其放入字符串:

int toConvert = 999;
string res = "";
while (toConvert)
{
  int lastDigit = toConvert % 10; //retrieve last digit
  char c = lastDigit + '0';       //translate it to the char corresponding
  string reverse(c);      //We have to add it in front of the string, or otherwise 
  reverse.append (res);   // the digits will be reversed.
  res = reverse;
  toConvert /= 10;
}

这是将int转换为string的一种非常基本的方法,我确信在操作符"<<"中做得更好,但是您明白了。

这里的左移是由追加函数重载的,可以把它看作s.append(c1),其中追加可以有多个函数追加(int i)追加(字符串)追加(字节b)等

每个函数做实际的转换到正确的字符串,并追加它…

您的代码中没有左移操作符。在C中,<<左移。在c++中,它是流插入操作符(出于C兼容性的原因,也支持左移)。

c++中允许重载各种操作符,包括按位左移<<。从概念上讲,你可以覆盖它做任何事情;唯一的限制是不能改变操作数的数量。

c++ IO流库中的流类利用了这一点。在语法上使用<<以某种方式将实参写入流,显然,按位移动流没有任何意义,因此操作符也可以用于做其他事情。这就是ss<<c1;在干什么。它没有做任何像位移位这样的事情。

有一种观点认为操作符重载是令人困惑的(也许这就是为什么要问这个问题)。

<<在这种情况下并不完全是左移操作符。

是一个流操作符。

追加(插入)字符到字符串流中。