连接C字符串在一行中没有定义
问题描述:
在编译时是否有C++方式连接两个constexpr C字符串?我知道如何用C语言来定义它,但是真的会有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
选择的分配器如何工作),并且都在运行时进行连接。
这个答案似乎是在正确的方向:https://stackoverflow.com/questions/2978259/programmatically-create-static-arrays-at-compile-time-in-c 我的模板foo不但是,似乎要尽量减少鼻烟。我尝试使用constexpr函数还没有导致答案。 – mfdeakin