Iva*_*nov 4 c++ compilation string-concatenation string-literals
为什么可以编译由空格,制表符或"\n"分隔的两个字符串文字而没有错误?
int main()
{
char * a = "aaaa" "bbbb";
}
Run Code Online (Sandbox Code Playgroud)
"aaaa"是一个字母*"bbbb"是一个字母*
没有特定的连接规则来处理两个字符串文字.显然,以下代码在编译期间出错:
#include <iostream>
int main()
{
char * a = "aaaa";
char * b = "bbbb";
std::cout << a b;
}
Run Code Online (Sandbox Code Playgroud)
这种连接是否适用于所有编译器?"aaaa"的空终止在哪里?"aaaabbbb"是一个连续的RAM块吗?
在这个声明中
char * a = "aaaa" "bbbb";
Run Code Online (Sandbox Code Playgroud)
在语法分析将相邻字符串文字视为一个文字之前,编译器在某些编译步骤中.
所以对于编译器,上面的语句相当于
char * a = "aaaabbbb";
Run Code Online (Sandbox Code Playgroud)
也就是说,编译器只存储一个字符串文字 "aaaabbbb"