2016-03-04 44 views
0

當我的一位朋友解決在線評判問題時,我遇到了問題。當計算索引時數組超出範圍

他撰寫案例1(例如)有一個撥錯的答案,有一個由案件受理2.

int a[4]; 
a[ 2+6-5 ]; //undefined behavior? case 1 
a[ 2+(6-5) ];//ok case 2 

Accroding到C++的std§5.7.5

if a[ 2+6-5 ] == *(a + 2+6-5); //ub 
if a[ 2+6-5 ] == *(a +(2+6-5)); //not ub 

我應該如何解釋的情況下1?

+1

我真的不理解這個問題,因爲兩種情況都是一樣的:'(2 + 6)-5 == 3 == 2+(6-5)'。你可以在[示例](http://stackoverflow.com/help/mcve)中使用它們來證明你認爲你看到的不同之處? – BoBTFish

回答

0

E1[E2]相當於*((E1)+(E2)),所以在第一種情況下將首先計算出(2+6-5)。所以不會有問題。

報價從N3337 5.2.1下標

表達E1 [E2]是相同的(根據定義)爲*((E1)+(E2))

+0

是否有可能像'1 + INT_MAX - (INT_MAX-1)'一樣計算導致問題? – Sylveon

+0

@Sylveon這與你在問題中提到的任何東西都沒什麼關係。請更新您的問題,以顯示一個完整的例子,說明您看到的差異。 – BoBTFish

+0

@Sylveon我得到了[warnings](http://melpon.org/wandbox/permlink/rfxFVoWxz3oMd6Ot)表達式,所以我猜這會導致一些問題。 – MikeCAT