gpt4 book ai didi

c++ - 宏字符串连接

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:26 24 4
gpt4 key购买 nike

我使用宏来连接字符串,例如:

#define STR1 "first"
#define STR2 "second"

#define STRCAT(A, B) A B

其中 STRCAT(STR1 , STR2 ) 产生 "firstsecond"

我在其他地方以这种方式将字符串关联到枚举:

enum class MyEnum
{
Value1,
Value2
}
const char* MyEnumString[] =
{
"Value1String",
"Value2String"
}

现在以下不起作用:

STRCAT(STR1, MyEnumString[(int)MyEnum::Value1])

我只是想知道是否可以构建一个将 #defined 字符串文字与 const char* 连接起来的宏?否则,我想我会不用宏,例如这样(但也许你有更好的方法):

std::string s = std::string(STR1) + MyEnumString[(int)MyEnum::Value1];

最佳答案

该宏仅适用于字符串文字,即用双引号括起来的字符序列。该宏起作用的原因是 C++ 标准将相邻的字符串文字视为单个字符串文字。换句话说,如果你写对编译器来说没有区别

"Quick" "Brown" "Fox"

"QuickBrownFox"

连接在编译时执行,在程序开始运行之前。

const char* 变量的串联需要在运行时发生,因为字符指针(或任何其他指针,就此而言)直到运行时才存在。这就是为什么您不能使用 CONCAT 宏来执行此操作的原因。不过,您可以使用 std::string 进行串联 - 这是解决此问题的最简单的解决方案之一。

关于c++ - 宏字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com