当第一个字符串在预处理器指令中定义,第二个字符串在C++中常量时,如何连接 2 个字符串
How to concatenate 2 strings when the first is defined in a preprocessor directive and the second is constant in C++?
这是我所拥有的:
#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";
相关文章:
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 尝试将 c 字符串数组与分隔符连接起来
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 如何连接格式字符串?
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 这两个C++语句连接字符串有什么区别?
- 连接和压缩标准::vector<std::字符串的最佳方法>
- 使用短运算符的字符串连接有区别吗?
- 连接资源文件中的字符串,并将其传递给菜单项字符串 (winapi) c++
- 连接字符串族
- 如何使用 + 运算符连接字符串
- 将旧 cstring 的标记连接成新的 C 字符串
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- C++字符串流连接查询
- 当int为char时,C++字符串不连接char
- C++ int 到字符串,连接字符串
- 如何在编译期间将const字符串初始化为两个字符串的连接
- LPWSTR字符串的连接
- 用于编译时字符串文字连接的宏的c++替代方案
- 字符串流是否比字符串的运算符"+"更适合字符串对象连接?