1

这是我所拥有的:

#define STRING "string 1"

string string2 = STRING + "string3";

这是错误的。解决办法是什么?问题string2必须是恒定的还是其他什么,为什么?

4

3 回答 3

8
#define STRING "string 1"

std::string string2 = STRING "string3";

相邻字符串字面量的连接不是预处理器的特性,它是 C/C++ 的特性

于 2012-08-17T06:54:06.143 回答
1

您不能在两个字符串文字上使用 operator +,因为这实际上意味着您正在尝试添加两个 char 指针。

有两种方法可以实现您想要的:

您可以使用运行时“字符串”连接(不是预处理器),但为此您需要从字符串文字之一构造 std::string ,以便编译器知道要查找的运算符 + 重载:

#define STRING "string 1"
string string2= string(STRING) + "string3"

或者,要使用编译时连接,请将两个字符串都保留为字符串文字,然后一个接一个地编写,编译器会将它们连接起来:

#define STRING "string 1"
string string2= STRING "string3"

或者(用 C 回答):

#define STRING "string 1"
const char string2[]= STRING "string3"
于 2012-08-17T06:53:46.497 回答
0

一般来说,您可以将自己想象STRING成一个const char *. 因此,它没有“如何向自己添加另一个 const char*”的概念。

为了使您的案例起作用,您可以让编译器将它们连接起来:

#define STRING "string 1"
std::string string2 = STRING "string3"

它仅适用于字符串文字(在源代码中定义的常量字符串),或者通常您必须std::string首先使用它,它有一个operator+重载,允许您向它添加一个 C-String:

#define STRING "string 1"
std::string string2 = std::string(STRING) + "string3";
于 2012-08-17T06:55:46.623 回答