C++中拼接字符串常量
有时候,字符串很长,无法放到一行中。C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。事实上,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。因此,下面所有的输出语句都是等效的:
cout << "I'd give my right arm to be" " a great violinist.\n";
cout << "I'd give my right arm to be a great violinist.\n";
cout << "I'd give my right ar"
"m to be a great violinist.\n";
注意,拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一个字符将紧跟在第一个字符串的最后一个字符(不考虑\0)后面。第一个字符串中的\0字符将被第二个字符串的第一个字符取代。
C++可以把多个字符串常量拼接到一起,这样可以防止代码过长,两个字符串常量之间若是空格、换行符隔开,C++在编译时都会编译成一个字符串来处理,代码如下:
printf("test a... " "test b..." "test c...\n");
printf("test a... " \
"test b... " \
"test c... \n");
char pcTest1[256] = "test a..." "test b..." "test c...";
char pcTest2[256] = "test a... "\
"test b..."\
"test c...\n";
printf("input: %s", pcTest1);
printf("input: %s", pcTest2);
上述代码中在输出时都会输出到一行里。
我在宏定义时会利用到C++的字符串拼接特性,如在输出log信息时会用到,示例代码:
#define LOG_FORMAT "debug %s-%s-%d"
#define LOG_INFO __TIME__, __FUNC__, __LINE__
#define LOG(input, ...) printf(LOG_FORMAT input, LOG_INFO, ##__VA_ARGS__)
调用代码示例:
int val = 1;
LOG("log test\n");
LOG("log test, val=%d\n", val);
输出:
debug-15:00:12-main-200: log test
debug-15:00:12-main-201: log test, val=1
对C++感兴趣的朋友点这里:C/C++课程