在一行中连接C字符串,不需要定义

Concatenate C Strings in one line without define

本文关键字:字符串 不需要 定义 连接 一行      更新时间:2023-10-16

是否有c++方法在编译时连接两个constexpr C-string ?我知道如何在C中使用定义来做到这一点,但我更愿意使用c++的范围缩小和显式类型系统。我的主要目标是在编译时有一种很好的方式将字符串连接在一行中。

下面是一个我不希望的工作方式的例子:

#define STR1 "foo"
#define STR2 "blah"
#define CONCATED STR1 STR2

下面是一个没有按照我想要的方式工作的例子:

constexpr const char *str1 = "foo";
constexpr const char *str2 = "blah";
constexpr const char *concated = str1 str2;

只能在编译时使用字符串字量完成。

 constexpr const char concatenated[] = "foo" "blah";

这是您的CONCATED宏实现的效果(实际上,它实际上是预处理器如何扩展该宏的使用)。

如果你想连接命名变量,那么不可能满足你在编译时避免使用堆或堆栈进行连接的要求。

两个明显的选择是分配足够的内存来保存结果,然后使用strcat(),或者使用std::string类型。这两种方法都涉及使用堆或堆栈(取决于您如何分配内存,以及您为std::string选择的分配器如何工作),并且都在运行时进行连接。