int main()
{
int a=1;
int b=2;
int c=a+++b;
cout<<"c"<<c<<endl;
}
c的值原來是。雖然,它給了我一個錯誤c = a ++ b。這裏發生了什麼?爲什麼c = a +++ b工作?一個C++程序。爲什麼此代碼有效?
int main()
{
int a=1;
int b=2;
int c=a+++b;
cout<<"c"<<c<<endl;
}
c的值原來是。雖然,它給了我一個錯誤c = a ++ b。這裏發生了什麼?爲什麼c = a +++ b工作?一個C++程序。爲什麼此代碼有效?
看起來像a是後增量然後加到b間距不好。例如a ++ + b。評估變量a然後遞增。這就是說a ++ b是無效的語法。
(++)後增加的優先級最高,最後以(a++) + b
結尾。
爲什麼a+++b
「有效」和a++b
不是C和C++語言解析定義方式的關鍵部分。這就是所謂的「貪婪」解析器。它將結合儘可能多的元素來產生一個有效的標記。
因此,鑑於它是一個貪婪的解析器,a++b
變成a++ b
,這是無效的。 a+++b
變成a++ + b
,這在語法上是有效的 - 這是否是你想要的是另一回事。如果你想寫a + +b
,那麼你需要空格來分離令牌。
它被解析爲'a ++ + b',它是一個增量和一個加法。 –
@chris你可能是對的。 –
雖然C,[這個問題](http://stackoverflow.com/questions/5341202/why-doesnt-ab-work-in-c)是一個類似的概念。與此相關的一個關鍵詞是*最大蒙克*。也就是說,'a +++ b'是'a ++ + b',而不是'a + ++ b'。 – chris