我遇到了麻烦,我无法自己解决这个问题。
// string::operator+= vs +
#include <iostream>
#include <string>
using namespace std;
int main ()
{
unsigned char array[6]= { 'f','o','o','b','a','r' };
string name ("works and not");
cout << name<< endl;
name ="";
for(int i=0; i < 6; i++)
name += array[i];
cout << "working: "<< name << endl;
name ="";
name = array[1] + array[0] + array[0] + array[3] + array[4] + array[5];
cout <<"not working: "<< name << endl;
return 0;
}
现在我明白了+=
符号中有一些隐藏的转换,我知道,加号符号会添加我的字符的整数,
并且只是转换最终值(到&#39; p&#39;)。
但我需要将各种字符组合成一个字符串..如果可能的话,在一行中... 因为我需要不止一次(600 ++次),并且它已经搞乱了代码。
因为这是第一次,而且最有可能是我最后一次需要转换我的&#34;数组&#34;值为字符串,我不是不改变我的字符串btw。
谢谢你!答案 0 :(得分:2)
name = array[1] + array[0] + array[0] + array[3] + array[4] + array[5];
要求在一行中执行此操作是您的问题。在考虑=
之前评估name
的右侧。是的,既然这些都是unsigned char
s,那么你所得到的只是unsigned char
。
如果<{em> array
属于char
,则会有一条捷径:
name = std::string() + array[1] + array[0] + array[0] + array[3] + array[4] + array[5];
现在,RHS正在从应用于(临时)operator+
的一系列std::string
构建,最终的连接结果被复制分配到name
。这很难看,但是......
但是你不能在unsigned char
上使用它,因为operator+
和std::string
没有unsigned char
。你基本上把自己设计成一个角落,所以,如果你不能使用循环或者首先使用std::string
开头,你就是SOL。
如果您不介意进行一些重构,那么这是2015年的解决方案:
#include <iostream>
#include <string>
int main()
{
unsigned char array[6] = { 'f','o','o','b','a','r' };
std::string name;
for (auto i : {1,0,0,3,4,5})
name += array[i];
std::cout << name << '\n';
}