这是我所拥有的:
#define STRING "string 1"
string string2 = STRING + "string3";
这是错误的。解决办法是什么?问题string2
必须是恒定的还是其他什么,为什么?
这是我所拥有的:
#define STRING "string 1"
string string2 = STRING + "string3";
这是错误的。解决办法是什么?问题string2
必须是恒定的还是其他什么,为什么?
#define STRING "string 1"
std::string string2 = STRING "string3";
相邻字符串字面量的连接不是预处理器的特性,它是 C/C++ 的特性
您不能在两个字符串文字上使用 operator +,因为这实际上意味着您正在尝试添加两个 char 指针。
有两种方法可以实现您想要的:
您可以使用运行时“字符串”连接(不是预处理器),但为此您需要从字符串文字之一构造 std::string ,以便编译器知道要查找的运算符 + 重载:
#define STRING "string 1"
string string2= string(STRING) + "string3"
或者,要使用编译时连接,请将两个字符串都保留为字符串文字,然后一个接一个地编写,编译器会将它们连接起来:
#define STRING "string 1"
string string2= STRING "string3"
或者(用 C 回答):
#define STRING "string 1"
const char string2[]= STRING "string3"
一般来说,您可以将自己想象STRING
成一个const char *
. 因此,它没有“如何向自己添加另一个 const char*”的概念。
为了使您的案例起作用,您可以让编译器将它们连接起来:
#define STRING "string 1"
std::string string2 = STRING "string3"
它仅适用于字符串文字(在源代码中定义的常量字符串),或者通常您必须std::string
首先使用它,它有一个operator+
重载,允许您向它添加一个 C-String:
#define STRING "string 1"
std::string string2 = std::string(STRING) + "string3";