C++ A C++;节目。为什么这个代码可以工作? intmain() { INTA=1; int b=2; int c=a+++b; cout

C++ A C++;节目。为什么这个代码可以工作? intmain() { INTA=1; int b=2; int c=a+++b; cout,c++,C++,看起来像是a是后增量,然后以不正确的间距添加到b。例如a++b。变量a被求值,然后递增。也就是说a++b是无效语法。请查看 (++)后增量有最高的优先级,Sou-YouthUp以(A++)+B< /C> > (p>代码> A+++b Works',而A++B不是C和C++语言解析的方式,这就是所谓的“贪心”解析器,它将尽可能多地组合成一个有效的令牌。 因此,假设它是一个贪婪的解析器,a++b变成了a++b,这是无效的。a++b变成了a++b,这在语法上是有效的-这是否是你想要的是另一回事。如果你

看起来像是a是后增量,然后以不正确的间距添加到b。例如a++b。变量a被求值,然后递增。也就是说a++b是无效语法。

请查看


(++)后增量有最高的优先级,Sou-YouthUp以<代码>(A++)+B< /C> > <>(p>代码> A+++b Works',而A++B不是C和C++语言解析的方式,这就是所谓的“贪心”解析器,它将尽可能多地组合成一个有效的令牌。


因此,假设它是一个贪婪的解析器,
a++b
变成了
a++b
,这是无效的。
a++b
变成了
a++b
,这在语法上是有效的-这是否是你想要的是另一回事。如果你想写
a++b
,那么你需要空格来分隔令牌。

它被解析为
a+++b
是一个增量和一个加法。@克里斯,你可能是对的。虽然C是一个类似的概念。与此相关的一个关键短语是maximal munch。也就是说,
a+++b
a+++b
,而不是
a+++b
int main()
{
  int a=1;
  int b=2;
  int c=a+++b;
  cout<<"c"<<c<<endl;
}