3

基于看到正在编译的代码中出现明显错误,我将其简化为

#include <iostream>
#include <string>
using namespace std;

int main()
{
    const char* p = "The ";
    string s = string("Bob ") + + "world.";
    cout << s << endl;
}

我原以为最大咀嚼会将“++”视为“++”并产生错误。

4

4 回答 4

2

最大咀嚼是指处理一个没有任何空格的标点序列。

您的代码有空格。当中间有空格时,解析器/词法分析器不会创建单个标记,因为语法不允许运算符包含空格。

于 2012-10-11T15:30:25.673 回答
2

您误解了“最大咀嚼”的作用——它不会神奇地连接运算符——+ +不会变成++. 后一个适用于"world.",仅此而已:

string s = string("Bob ") + (+"world.");

考虑到

int x = +1;
于 2012-10-11T15:31:45.030 回答
1

不,+ +不一样+。最后的子表达式是+"world.",它是+指针上的一元,它什么也不做。

于 2012-10-11T15:34:07.197 回答
0

由于两者之间的空间+,词法分析器将每个+标记视为不同的标记。

于 2012-10-11T15:31:27.107 回答