当第一个字符串在预处理器指令中定义,第二个字符串在C++中常量时,如何连接 2 个字符串

How to concatenate 2 strings when the first is defined in a preprocessor directive and the second is constant in C++?

本文关键字:字符串 何连接 连接 第二个 处理器 预处理 第一个 指令 定义 C++ 常量      更新时间:2023-10-16

这是我所拥有的:

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

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

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

相邻字符串的串联不是预处理器的功能,而是 C/C++

的功能

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

有两种

方法可以实现您想要的目标:

您可以使用运行时"字符串"串联(不是预处理器),但为此您需要从其中一个字符串文本构造一个 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"
一般来说,

你可以把你的STRING想象成一个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";