在编译时是否有一种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;
答案 0 :(得分:1)
只能在编译时使用字符串文字来完成。
constexpr const char concatenated[] = "foo" "blah";
这是您的CONCATED
宏实现的效果(实际上,它实际上是预处理器如何扩展该宏的使用)。
如果要连接命名变量,则无法满足您在编译时进行串联的要求,避免使用堆或堆栈。
两个明显的选择是分配足够的内存来保存结果,然后使用strcat()
,或使用std::string
类型。这两个都涉及使用堆或堆栈(取决于您如何分配内存,以及您为std::string
选择的分配器如何工作),并且都在运行时进行连接。