返回char1 + char2?不可能吗?

poc*_*coa 4 c++ string char

我正在尝试从函数返回一个字符串.这基本上将一些字符添加在一起并返回字符串表示.

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
Run Code Online (Sandbox Code Playgroud)

可以返回布尔值,如return c1 =='x'.是不是可以返回字符串值?我知道它有可能像这样:

string result;
result.append(c1, c2);
return result;
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,所以我认为必须有更优雅的解决方案.

i_a*_*orf 9

不,你不能这样做,因为在一起添加两个字符不会给你一个字符串.它给你另一个char; 在这种情况下,'a'+'b'实际上会给你'?'(在Windows上有标准的CP_ACP代码页).Char是一个序数类型,就像整数一样,编译器只知道如何以最基本的方式添加它们.字符串是一个完全不同的野兽.

你可以做到,但你必须明确:

return string(1, c1) + string(1, c2)
Run Code Online (Sandbox Code Playgroud)

这将构造两个临时字符串,每个字符串初始化为作为第二个参数传递的字符的一次重复.由于operator+字符串被定义为连接函数,因此您现在可以执行所需的操作.

  • 由于`std :: string`为`char`定义`operator +`,你也可以这样做:`return std :: string()+ c1 + c2;` (6认同)

AnT*_*AnT 7

charC++(以及C)中的类型是整数类型.它们表现为整体类型.就像你5 + 3在代码中编写一样,你希望得到积分8作为结果(而不是字符串"53"),当你c1 + c2在上面的代码中写入时,你应该得到一个完整的结果 - 和的算术c1c2.

如果您确实想要连接两个字符以形成字符串,则必须以不同方式执行此操作.有很多方法可以做到这一点.例如,您可以形成C样式的字符串

char str[] = { c1, c2, `\0` };
Run Code Online (Sandbox Code Playgroud)

这将隐式转换成std::string

return str;
Run Code Online (Sandbox Code Playgroud)

或者你可以立即建立std::string(也可以通过几种不同的方式完成).