基于看到正在编译的代码中的明显错误,我将其缩减为此
#include <iostream>
#include <string>
using namespace std;
int main()
{
const char* p = "The ";
string s = string("Bob ") + + "world.";
cout << s << endl;
}
我原以为maximal munch会将“+ +”视为“++”并产生错误。
答案 0 :(得分:2)
最大咀嚼是指处理一系列标点符号,没有任何空格。
您的代码有空格。当中间有空格时,解析器/词法分析器不会创建单个标记,因为语法不允许运算符包含空格。
答案 1 :(得分:2)
你很想知道“最大咀嚼”的作用 - 它不能神奇地连接操作符 - + +
不会成为++
。后者适用于"world."
,但就是这样:
string s = string("Bob ") + (+"world.");
想想
int x = +1;
答案 2 :(得分:1)
不,+ +
与+
不同。最终的子表达式是+"world."
,它是指针上的一元+
,它什么都不做。
答案 3 :(得分:0)
由于两个+
之间的空格,每个+
被词法分析器视为不同的标记。