在没有定义的情况下将C字符串连接在一行中

时间:2015-08-21 00:50:19

标签: c++ constexpr c-strings

在编译时是否有一种C ++方式连接两个constexpr C字符串?我知道如何在C中使用define来实现它,但是我真的宁愿使用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;

1 个答案:

答案 0 :(得分:1)

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

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

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

如果要连接命名变量,则无法满足您在编译时进行串联的要求,避免使用堆或堆栈。

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