在一行中连接C字符串,不需要定义
Concatenate C Strings in one line without define
是否有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
选择的分配器如何工作),并且都在运行时进行连接。
相关文章:
- 类中的字符串不命名类型
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 为什么output_editor Concept不需要output_e迭代器标记
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- C++ 写入路径名中包含不需要的空字符的文件
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 使用 assimp 加载模型 - 不需要提升?
- 为什么转换函数声明不需要至少一个定义类型说明符
- 为什么在调用C#DLL时不需要提供字符串缓冲区
- 为什么<string>字符串对象需要 #include 而不是字符串文本?
- 隐藏或删除不需要的字符串从 Windows 可执行文件版本中
- 为什么我不需要解引用一个char指针来输出c风格的字符串?
- 如何在c++中删除字符串中不需要的内容
- 回文程序和 C 样式字符串中不需要的字符
- 在一行中连接C字符串,不需要定义
- glutBitmapString/glutStrokeString似乎需要常量无符号字符* - 字符串不起作用