基于看到正在编译的代码中出现明显错误,我将其简化为
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char* p = "The ";
string s = string("Bob ") + + "world.";
cout << s << endl;
}
我原以为最大咀嚼会将“++”视为“++”并产生错误。
基于看到正在编译的代码中出现明显错误,我将其简化为
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char* p = "The ";
string s = string("Bob ") + + "world.";
cout << s << endl;
}
我原以为最大咀嚼会将“++”视为“++”并产生错误。
最大咀嚼是指处理一个没有任何空格的标点序列。
您的代码有空格。当中间有空格时,解析器/词法分析器不会创建单个标记,因为语法不允许运算符包含空格。
您误解了“最大咀嚼”的作用——它不会神奇地连接运算符——+ +
不会变成++
. 后一个适用于"world."
,仅此而已:
string s = string("Bob ") + (+"world.");
考虑到
int x = +1;
不,+ +
不一样+
。最后的子表达式是+"world."
,它是+
指针上的一元,它什么也不做。
由于两者之间的空间+
,词法分析器将每个+
标记视为不同的标记。